免责声明:这个问题的目的是为了创建一个问答,作为多个问题的参考,而不是多次解释它。
如何在 VBA 中获取按钮或其他对象的 HTML 元素以实现 IE 自动化?
例如:我想要从中获取“发布您的问题和答案”按钮的元素 ID超级用户。
答案1
在这个例子中,我们使用的是流行的 Chrome 浏览器,尽管许多其他浏览器也有相同的检查 HTML 元素的方法。
右键单击方法
找到有问题的元素(在我们的例子中是“发布您的问题“ 按钮)。
右键单击元素
选择下拉项
Inspect
这将带来F12 开发人员工具。此工具箱将自动突出显示您的元素。
如您所见,您的元素有几个选项可以引用它。最好的方法是使用它的ID
,因为这始终是一个唯一值。
该元素的 ID 是submit-button-42
,您可以在此找到它:
<id="submit-button-42">
在 VBA 中,您可以通过以下方式将变量设置为此元素:
Dim IE As InternetExplorer, myElement As Object
Set IE = New InternetExplorer
Set myElement = IE.document.getElementByID("submit-button-42")
不幸的是,并非每个元素都有 ID。此元素也包含在几个集合中。集合项的问题是,许多其他元素也可能包含在同一个集合中 - 这意味着它不是唯一的值。
在我们的示例中,有两个集合可供引用:class
和tag
。ClassName
btn__带有图标,我们可以从以下数据看出:
<button class="btn__with-icon"...>
并且TagName
是按钮(在上面同一个例子中,它直接列在类之前)。
在 VBA 中,您可以按如下方式为这些集合设置变量:
Dim IE As InteretExplorer, ieClassColl As Object, ieTagColl As Object
Set ieClassColl = IE.document.getElementsByClassName("btn__with-icon")
Set ieTagColl = IE.document.getElementsByTagName("button")
记住,这些都是收集项目。这意味着要引用我们所涉及的确切按钮,我们要么需要知道它的指数,或者我们可以用一个For...Each
语句循环
如果你知道索引号是0,然后使用:
Set ieClassBtn = IE.document.getElementsByClassName("btn__with-icon")(0)
否则,您可以循环遍历它们:
Dim o As Object, oColl As Object
Set oColl = IE.document.getElementsByTagName("button")
For Each o In oColl
If o.innerText = "Post Your Question And Answer" Then
Exit For
End If
Next