VBA,搜索文本字符串的HTML元素ID
在web数据收集过程中,我有以下几行代码:VBA,搜索文本字符串的HTML元素ID,html,vba,excel,Html,Vba,Excel,在web数据收集过程中,我有以下几行代码: IE.document.GetElementById("ct175_tocAccept").Click 问题是,该公司经常以不一致的时间间隔更新其网站,并且每次都更改上述ct。就我个人而言,我不介意经常更新,但实际上这不是一个选项,因为我的同事经常需要立即获得这些结果,并且无法自己解决问题 有没有一种方法可以让我在该站点上搜索所有ElementID,找到文本“toAccept”,然后单击该结果?该项目没有可供我选择的名称。非常感谢所有建议和解决方案
IE.document.GetElementById("ct175_tocAccept").Click
问题是,该公司经常以不一致的时间间隔更新其网站,并且每次都更改上述ct。就我个人而言,我不介意经常更新,但实际上这不是一个选项,因为我的同事经常需要立即获得这些结果,并且无法自己解决问题
有没有一种方法可以让我在该站点上搜索所有ElementID,找到文本“toAccept”,然后单击该结果?该项目没有可供我选择的名称。非常感谢所有建议和解决方案
编辑:
资料来源:
是的,我已阅读、理解并同意这些条款和条件
我遇到的主要问题是,页面上几乎每个elementid和名称都使用ct175(现在更新为ct176)部分。另外,为了澄清,我在原始帖子中说元素没有名称。我提供的源代码确实有一个名称,但我需要处理的其他多个源代码都没有名称。显然,如果没有我面前的站点,就无法测试这一点,但您有两个对象可以迭代,然后单击满足所有条件的对象,这似乎是:
- 父类的复选框为
checkbox
- 标记名为
label
Option Explicit
Sub TEST()
' Code Above
Dim objCheckbox As Object, objCheckboxes As Object
Dim objLabel As Object, objLabels As Object
Set objCheckboxes = ie.document.getElementsByClassName("checkbox")
For Each objCheckbox In objCheckboxes
Set objLabels = Nothing
On Error Resume Next
Set objLabels = objCheckbox.getElementsByTagName("label")
On Error GoTo 0
For Each objLabel In objLabels
If objLabel.innerText Like "*Yes, I have read, understand and agree*" Then
objLabel.Click
Exit For
End If
Next objLabel
Next objCheckbox
End Sub
另一种方法可能是找到保持不变的父节点,然后单击第n个子节点。我不使用VBA进行任何web抓取,也不推荐使用VBA,因此这种方法实际上可能不可行。这绝对值得一试,谢谢你的想法。这是可能的,但这令人头痛。Xpath将在它们之间添加任何sybling时更改@詹姆斯:试试使用通配符。你能提供元素及其父节点的源代码吗?网站是什么?您可以匹配
.href
或.innerText
这对我来说很有效。谢谢你的建议(也谢谢其他人的建议)。
Option Explicit
Sub TEST()
' Code Above
Dim objCheckbox As Object, objCheckboxes As Object
Dim objLabel As Object, objLabels As Object
Set objCheckboxes = ie.document.getElementsByClassName("checkbox")
For Each objCheckbox In objCheckboxes
Set objLabels = Nothing
On Error Resume Next
Set objLabels = objCheckbox.getElementsByTagName("label")
On Error GoTo 0
For Each objLabel In objLabels
If objLabel.innerText Like "*Yes, I have read, understand and agree*" Then
objLabel.Click
Exit For
End If
Next objLabel
Next objCheckbox
End Sub