VBA,搜索文本字符串

时间:2017-11-17 14:11:09

标签: html vba excel-vba excel

在网页数据抓取期间,我有以下行:

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)部分。另外,为了澄清,我在原帖中说,该元素没有名称。我提供的源代码确实有一个名称,但是我需要使用其他多个没有名称的源代码。

1 个答案:

答案 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