【问题标题】:VBA -- use getElementById when no ID is specifiedVBA -- 未指定 ID 时使用 getElementById
【发布时间】:2018-07-01 04:46:12
【问题描述】:

我正在修改一个相当广泛的 VBA 网络爬虫,并寻找一些关于如何在没有指定实际 id 时通过 id 获取元素的建议。

<ul class="rtUL">
    <li class="rtLI"><div class="rtMid">
    <span class="rtSp"></span><span class="rtPlus"></span>
    <a class="rtIn" href="/mhpviewer.aspx?FID=CSTAT">Claim Status</a>
    </div></li><li class="rtLI"><div class="rtMid">
    <span class="rtSp"></span><span class="rtPlus"></span>
    <a class="rtIn" href="/mhpviewer.aspx?FID=EVER">Eligibility Verification</a>

我需要获取的元素是包含“资格验证”的&lt;li&gt;。有没有办法获取子元素或只是内部 HTML?

【问题讨论】:

  • this thread 有帮助吗?或者this one
  • 我正在为数百个网页修改代码,并尝试学习获取这些元素的所有各种方法,因为创建变量可能更容易,即它们都需要相同类型的输入,而不是寻找特定的 id 或内部 HTML 文本,我试图找到一种方法来查看无序列表中的每个 li,这样我就可以最小化代码。这可能是不可能的,但有人可能会有一些提示。

标签: html excel vba web-scraping


【解决方案1】:

我假设您正在使用 InternetExplorer.Application(版本 8 及更高版本),已设法检索页面并且格式与您的问题相符。

Set Data = IE.Document.querySelectorAll("li>div>a") 
'looks for tag `a` inside tag `div` inside tag `li`

For Each oA In Data
    If oA.InnerHTML = "Eligibility Verification" Then
        Set oLI = oA.ParentNode.ParentNode
        Debug.Print oLI.InnerHTML
    End If
Next oA

【讨论】:

  • 每当我尝试使用除 Debug.Print 之外的其他任何操作时,它都会使我的 Web 浏览器 IEv11 崩溃。嵌套元素提示是一个很棒的提示,我认为它将引导我朝着我希望的方向前进。谢谢!
【解决方案2】:

CSS 选择器:

您可以使用 .rtIn[href=/mhpviewer.aspx?FID=EVER] 的 CSS 选择器。这说 具有rtin 类的元素,其属性为href,值为'=/mhpviewer.aspx?FID=EVER'


CSS 查询:


VBA:

你可以用

申请第一个匹配元素
Debug.Print ie.document.querySelector(".rtIn[href=/mhpviewer.aspx?FID=EVER]").innerHTML

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多