html - 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 多个不同的代码示例,包括调用帧号,都没有工作,我被卡住了。
解决方案
试试下面的代码。不玩那个网站就很难给出任何解决方案。他们总是假设的。
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
推荐阅读
- typescript - TypeScript 到 JSDoc:全局/接口
- javascript - 渲染值更改后,在顶部显示更改后的值
- node.js - NodeJS Express 从字符串创建 Mongoose 查询
- c++ - 动态重新翻译 UI。按钮排列不正确
- c# - DataContext 设置为 DataContext 的字符串值,但不是实际对象
- reactjs - 在浏览器窗口中反应打开的 Api 响应
- mysql - MySQL:无法更新 JSON 列以将值从浮点数转换为整数
- python - Groupby 多列并根据列值提取前 x 行
- visual-studio - 如何让计时器出现在屏幕上?
- python - 试图创建一个循环来检查列表中的所有位置。我正在写的内容只返回第一个位置的 true 或 false