首页 > 解决方案 > VBA单击具有动态elementID和重复类的Web按钮

问题描述

我对 VBA/html 很陌生,试图自动填写表格,但甚至不能调用它......我在网上搜索了数周尝试了许多不同的代码组合,但没有一个能让我到达那里。

HTML 代码/元素如下所示:

div title:"TextText" class:"text-truncate mb-2" id="abc_sidebar_startmenuitem" data-type="record" data-appid="82" data url="index.cfm?Xxx=&Yyy=">

i class="fa icon-app-82 mr-1 fa-fw">/i>

span class="clickable" id="ext-eng123">Text/span>
/div>

问题是class="clickable"页面上第 30 次出现可点击,id="ext-eng123"是由文本ext-eng和 3 个可变未知数字构建的,总是不同的。

使用的 VBA 代码示例:

Sub GetClick()
    Dim ie As Object
    Set ie = CreateObject("internetexplorer.application")
    With ie
        .Visible = True
        .navigate "https://company.application.com/home/index.cfm?Tab=home"
        Do While .Busy
            DoEvents
        Loop
        Do While .readyState <> 4
            DoEvents
        Loop
    End With
    Dim objIE As Object
    objIE = document.getElementByClassName("clickable")(29)
    objIE.Click
End Sub

我尝试了 10 多个不同的代码示例,包括调用帧号,都没有工作,我被卡住了。

标签: htmlvbaexcelweb-scraping

解决方案


试试下面的代码。不玩那个网站就很难给出任何解决方案。他们总是假设的。

Sub GetClick()
    Dim IE As New InternetExplorer, Html As HTMLDocument

    With IE
        .Visible = True
        .Navigate "https://company.application.com/home/index.cfm?Tab=home"
        While .Busy = True Or .ReadyState < 4: DoEvents: Wend
        Set Html = .Document
    End With

    ''If the problem still persists, make sure to put here some delay

    Html.querySelector(".clickable[id^='ext-eng']").Click
End Sub

另一种方法可能类似于(如果“文本”一词没有出现在具有相同类名的任何地方):

For Each elem In Html.getElementsByClassName("clickable")
    If InStr(elem.innerText, "Text") > 0 Then elem.Click: Exit For
Next elem

参考添加:

Microsoft Internet Controls
Microsoft HTML Object Library

推荐阅读