Html 使用VBA&;我需要点击页面上的某个文本

Html 使用VBA&;我需要点击页面上的某个文本,html,excel,vba,internet-explorer,controls,Html,Excel,Vba,Internet Explorer,Controls,以下是我可以看到的HTML宏和目标的一部分: 20190180963865 类Ligne0 OrderNO在主体中是唯一的。我需要用我创建的数组交叉检查“20190180963865”,当发现时,我可以单击元素,将我带到另一个页面 我所尝试的: **MSGBOX.ie.document.url为我提供了正确的url。我在这里裁剪了宏的顶部以节省空间 MSGBOX BOO应该给我“20190180963865”,但没有给我任何东西。我添加了.innertext和.value,但是msgbox没有显

以下是我可以看到的HTML宏和目标的一部分:

20190180963865

类Ligne0 OrderNO在主体中是唯一的。我需要用我创建的数组交叉检查“20190180963865”,当发现时,我可以单击元素,将我带到另一个页面

我所尝试的: **MSGBOX.ie.document.url为我提供了正确的url。我在这里裁剪了宏的顶部以节省空间

MSGBOX BOO应该给我“20190180963865”,但没有给我任何东西。我添加了.innertext和.value,但是msgbox没有显示出来

然后用BOO我希望能够。点击IE上的文本


**我已经勾选了“引用Microsoft internet控件”和“Microsoft HTML对象库”

您说msgbox Boo没有返回任何内容。可能的原因是,您正在循环中设置该变量,并且正在获取循环外的值。因此,当您尝试获取该值时,它可能会被替换为空值

基于您上面的代码,我开发了这个示例,它将遍历网页上的所有链接,并匹配其内部文本和类名,然后单击链接

VBA代码:

Sub demo()

    Dim i As Long
    Dim URL As String
    Dim IE As Object

    Set IE = CreateObject("InternetExplorer.Application")

    IE.Visible = True

    URL = "D:\Backup20190913\tests\295.html"

    IE.Navigate URL


    Do While IE.readyState = 4: DoEvents: Loop   'Do While
    Do Until IE.readyState = 4: DoEvents: Loop   'Do Until

    Set Alllinks = IE.document.getElementsByTagName("A")

    For Each Hyperlink In Alllinks
        If Hyperlink.innerText = "20190180963865" And Hyperlink.className = "Ligne0 OrderNo" Then
            Hyperlink.Click


        End If
    Next Hyperlink

    'Unload IE
    'Set IE = Nothing


End Sub
示例HTML代码:

<!doctype html>
<html>
<head>
<script>
function abc()
{
alert("clicked...");
}
</script>
</head>
<body>
<a class="Ligne0 OrderNo" style="width: 100%; height: 100%; display: block;" onclick="abc()">20190180963865</a>

</body>
</html>

函数abc()
{
警报(“单击…”);
}

此外,您可以根据自己的需求修改示例。您只需要从工作表中获取值,并在上面的代码中进行匹配


如果您在应用此建议方面有任何困难,请告知我们

您不需要循环,而且类已经用于感兴趣的
a
标记,因此您不想在已处于正确级别时尝试选择“按标记名”。querySelector返回单个节点;匹配指定选择器的第一个节点-在本例中,该节点是感兴趣元素的复合类名(复合类由“.”连接,“.”表示css类选择器)


如果按类名获取元素,并且元素的类在页面上是唯一的,那么元素集合中应该只有一个元素。为什么需要按标记获取元素?您只需检查
innertext
并单击它就可以了。不确定当类是唯一的时,为什么需要按标记名提取页面上的所有元素?这只是一个循环链接并匹配其innertext和类名的示例。如果op没有理由,那么op肯定可以使用类名直接单击元素,而不使用循环。
<!doctype html>
<html>
<head>
<script>
function abc()
{
alert("clicked...");
}
</script>
</head>
<body>
<a class="Ligne0 OrderNo" style="width: 100%; height: 100%; display: block;" onclick="abc()">20190180963865</a>

</body>
</html>
Dim BOO As String, element As Object

Set element = HTML.querySelector(".Ligne0.OrderNo")

If Not element Is Nothing Then
    BOO = element.innerText
    'do whatever else when element is found
End If