【问题标题】:Obtain Innertext from Web Element with Variable Path - Selenium使用可变路径从 Web 元素获取内部文本 - Selenium
【发布时间】:2021-01-16 15:33:51
【问题描述】:

我有一个在 Excel 2016 中运行的 VBA 宏。该宏使用 Chrome 和 Selenium WebDriver 从 Internet 带回信息。该宏会遍历几个类似的网页,但有些网页的行数比其他网页多或少。因此,我感兴趣的内部文本的 XPath 因页面而异。这是元素源代码的 sn-p,它是我试图定位和提取的“242”。

<div ng-repeat="squarefootage in improvement.SquareFootage" class="ng-scope">
  <div>
    <span class="labelSquareFootage ng-binding">ATTACHED GARAGE AREA </span><span class="result ng-binding">242</span>
  </div>
</div>

作为一种解决方法,我只是获取页面的整个源代码,然后使用INSTR 对其进行解析以找到我要查找的内容。我想知道是否有更优雅的方法来查找具有可变路径的元素? WebDriver 中是否有类似的东西

WDriver.FindElementbyInnerHTML

?

Here is a link到网站,你可以看几个不同的地址,看看从页面(地址)到页面(下一个地址)的路径是如何变化的。

【问题讨论】:

    标签: html excel vba selenium-webdriver web-scraping


    【解决方案1】:

    您可以收集所有具有匹配类的节点并循环,直到找到所需的车库文本,然后采用 nextSibling

    Public Sub Demo()
        'Your code to get to page and enter address and search, open heading, then....
        Dim html As MSHTML.HTMLDocument
    
        Set html = New MSHTML.HTMLDocument
    
        html.body.innerHTML = WDriver.PageSource
    
        Dim nodes As Object, node As Object, i As Long
    
        Set nodes = html.querySelectorAll(".labelSquareFootage")
    
        For i = 0 To nodes.Length - 1
            Set node = nodes.Item(i)
            If InStr(node.innerText, "ATTACHED GARAGE AREA") > 0 Then 
                Debug.Print node.NextSibling.innerText
                Exit For
            End If
        Next i  
    End Sub
    

    对于xpath,你可以试试

    //*[text()[contains(.,'ATTACHED GARAGE AREA')]]/following-sibling::span
    

    如果所需的值是下一个跨度节点。这会在 .innerText 中搜索所需的文本,然后采用 nextSibling 范围。

    CSS selectors

    【讨论】:

    • 感谢您的回答。我一直无法成功应用它,我认为页面之间的内容差异太大。我已经添加了指向该网站的链接。也许你可以看一下,看看你是否可以找到一种方法来处理几个不同的地址。
    • 试试:1703 CATO、4125 AMBER STREET 和 1761 ROCKIES COURT。他们每个人都有不同的路径通往车库面积。
    • 我可以看到 1761 ROCKIES COURT LAFAYETTE,但没有车库信息,只有地块平方英尺。我应该按 财产——所有权、地址和其他财产信息以外的其他内容吗?
    • 单击左侧的“评估”选项卡,您应该会看到“附加车库区域 1049”。感谢您的努力!
    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    相关资源
    最近更新 更多