代码之家  ›  专栏  ›  技术社区  ›  ScottyCov

当文本没有整齐地封装在标记中时,如何在Selenium中获取文本?

  •  0
  • ScottyCov  · 技术社区  · 2 周前
    <td data-title="Docket No.">"3228"
        <div class="cursor-pointer expand-collapse-container expand-document-name">
            <div class="expand-arrow" aria-hidden="true"></div>
            <div class="collapse-arrow" aria-hidden="true"></div>
        </div>
    </td>
    

    我正在使用Selenium,并希望获得以下文本

    <td data-title="Docket No.">
    

    在本例中为“3228”

    我试过:

    lastdocket=element.find_element(By.XPATH,'//*[@data-title="Docket No."]/text()').get_attribute('innerHTML')
    

    程序崩溃,我得到:

     Message: invalid selector
    from javascript error: {"status":32,"value":"The result of the xpath expression \"//*[@data-title=\"Docket No.\"]/text()\" is: [object Text]. It should be an element."}
    

    然后,我尝试从xpath表达式中去掉“text()”:

    lastdocket=element.find_element(By.XPATH,'//*[@data-title="Docket No."]/').get_attribute('innerHTML')
    

    当我打印“lastdocket”时得到这个:

    '3228<div class="cursor-pointer expand-collapse-container expand-document-name"><div class="expand-arrow" aria-hidden="true"></div><div class="collapse-arrow" aria-hidden="true"></div></div>'
    

    我意识到我可以删除后面的“3228”标签,但有办法只返回数字吗???

    1 回复  |  直到 2 周前
        1
  •  2
  •   Conal Tuohy    2 周前

    这个 find_element 方法只能返回一个元素,而不能返回文本节点(因此任何XPath都以 /text() 将失败)。

    但一旦你找到了你的元素,你就可以访问它 text 属性,它将返回文本“呈现时”,NB不一定与XPath完全相同 string() 函数将返回;的串联 text() 元素的节点子体。

    https://www.selenium.dev/documentation/webdriver/elements/information/#text-content