在网页数据抓取期间,我有以下行:
IE.document.GetElementById("ct175_tocAccept").Click
问题是公司经常以不一致的间隔更新他们的网站,并且每次都更改上面的ct#。就我个人而言,我并不介意经常更新它,但实际上这不是一种选择,因为我的同事经常需要这些结果并且无法自行解决问题。
我有没有办法在该网站上搜索所有ElementIds以获取文本“tocAccept”,然后点击该结果?该项目没有名称供我用作替代方案。非常感谢所有的建议和解决方案。
编辑: 来源:
<div class="checkbox">
<label for="ctl00_ctl76_g_22c8fb90_9788_4417_b231_10df683e9930_ctl00_tocAccept" class="required" aria-required="true">
<input name="ctl00$ctl76$g_22c8fb90_9788_4417_b231_10df683e9930$ctl00$tocAccept" type="checkbox" id="ctl00_ctl76_g_22c8fb90_9788_4417_b231_10df683e9930_ctl00_tocAccept" aria-required="true" hasvalidation="true" data-rule-required="true" data-msg-required="Yes, I have read, understand and agree to these terms and conditions is required.">
Yes, I have read, understand and agree to these terms and conditions</label>
</div>
我遇到的主要问题是页面上几乎每个元素和名称都使用ct175(现在更新为ct176)部分。另外,为了澄清,我在原帖中说,该元素没有名称。我提供的源代码确实有一个名称,但是我需要使用其他多个没有名称的源代码。
答案 0 :(得分:2)
显然无法在我面前没有网站的情况下对此进行测试,但是您有两个可以迭代的对象,然后单击符合所有条件的对象,这看起来如下:
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