当前位置: 首页 > 知识库问答 >
问题:

硒通过xpath获取文本

郎弘壮
2023-03-14

我正在尝试从网页复制一个文本元素并在我的控制台中打印它,作为对未来项目的测试。

这些是我收到错误时的行:

elem = driver.find_element_by_xpath("/html/body/text()[2]")
print(elem.text)

错误是这样的:

C:\Users\hp\Desktop\facebook-creator-studio-bot-master\get_cnp.py:12: DeprecationWarning: find_element_by_xpath is deprecated. Please use find_element(by=By.XPATH, value=xpath) instead
  driver.find_element_by_xpath("/html/body/form/input[2]").click()
C:\Users\hp\Desktop\facebook-creator-studio-bot-master\get_cnp.py:13: DeprecationWarning: find_element_by_xpath is deprecated. Please use find_element(by=By.XPATH, value=xpath) instead
  elem = driver.find_element_by_xpath("/html/body/text()[2]")
Traceback (most recent call last):
  File "C:\Users\hp\Desktop\facebook-creator-studio-bot-master\get_cnp.py", line 13, in <module>
    elem = driver.find_element_by_xpath("/html/body/text()[2]")
  File "C:\Users\hp\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 521, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "C:\Users\hp\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 1248, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "C:\Users\hp\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 425, in execute
    self.error_handler.check_response(response)
  File "C:\Users\hp\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: The result of the xpath expression "/html/body/text()[2]" is: [object Text]. It should be an element.
  (Session info: chrome=99.0.4844.82)
Stacktrace:
Backtrace:
        Ordinal0 [0x00769943+2595139]
        Ordinal0 [0x006FC9F1+2148849]
        Ordinal0 [0x005F4528+1066280]
        Ordinal0 [0x005F6E04+1076740]
        Ordinal0 [0x005F6CBE+1076414]
        Ordinal0 [0x005F6F50+1077072]
        Ordinal0 [0x00620D1E+1248542]
        Ordinal0 [0x006211CB+1249739]
        Ordinal0 [0x0064D812+1431570]
        Ordinal0 [0x0063BA34+1358388]
        Ordinal0 [0x0064BAF2+1424114]
        Ordinal0 [0x0063B806+1357830]
        Ordinal0 [0x00616086+1204358]
        Ordinal0 [0x00616F96+1208214]
        GetHandleVerifier [0x0090B232+1658114]
        GetHandleVerifier [0x009C312C+2411516]
        GetHandleVerifier [0x007FF261+560433]
        GetHandleVerifier [0x007FE366+556598]
        Ordinal0 [0x0070286B+2173035]
        Ordinal0 [0x007075F8+2192888]
        Ordinal0 [0x007076E5+2193125]
        Ordinal0 [0x007111FC+2232828]
        BaseThreadInitThunk [0x76CA6359+25]
        RtlGetAppContainerNamedObjectPath [0x77827C24+228]
        RtlGetAppContainerNamedObjectPath [0x77827BF4+180]

然后我的chomedrive关闭了。有什么问题?

共有2个答案

公西姚石
2023-03-14

正如错误跟踪中清楚描述的,这里的问题是

invalid selector: The result of the xpath expression "/html/body/text()[2]" is: [object Text]. It should be an element.

通过< code>print(elem.text),您正在尝试应用< code >。text方法,因此< code > driver . find _ element _ by _ xpath()需要网页上web元素的定位器,而< code > "/html/body/text()[2]" 不是web元素的有效XPath定位器。< br >例如``"/html/body"可能是web元素的有效定位符,而/text()引用某个web元素的text `属性值,但不引用web元素对象。< br> UPD
您在这里可以做的是获取web元素,提取它的文本,然后从那里提取所需的文本部分,如下所示:

elem = driver.find_element_by_xpath("/body")
print(elem.text)

这将为您提供几个文本字符串,而不仅仅是生成的代码,不幸的是,我们无法更好地使用硒,因为您要查找的文本位于body元素本身内部。
您可以在此之后拆分收到的文本以从中提取代码。

师俊健
2023-03-14

此错误消息。。。

selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: The result of the xpath expression "/html/body/text()[2]" is: [object Text]. It should be an element.

...意味着您使用的定位器策略是无效的选择器,

driver.find_element_by_xpath("/html/body/text()[2]")

将返回第二个匹配文本节点,因为Selenium只支持元素。

如果您的用例是从元素中检索文本,则需要在DOM树中唯一定位该元素,然后使用<code>get_attribute()

>

  • 使用css_selector和get_attribute(“内部HTML”):

    print(driver.find_element(By.CSS_SELECTOR, "element_cssSelector").get_attribute("innerHTML"))
    

    使用xpath和text属性:

    print(driver.find_element(By.XPATH, "element_xpath").text)
    

    使用硒的文本和内部HTML之间的区别

  •  类似资料:
    • 我使用了以下代码, 这会引发错误“表达式不是合法表达式”。“代码:“12”nsresult:“0x805b0033(SyntaxError)”位置:”“]”。 当我缩小搜索范围到 它工作正常,我得到了特定行中的所有文本。然而,当我将其扩展到特定于第1个代码中所示的列时,我得到了错误。 html代码段,

    • 嗨,我一直在到处寻找一个非常简单的解释,如何通过xPath找到一个元素。 我想要的只是一种简单的方法来寻找一个元素,但是我想要找到的所有帮助都需要一个。这对我不管用。以下是我想做的: 加载URL 这是我的代码: 当我执行 我得到未定义时,我做 有没有更简单的方法来获取元素?也许是。。。。

    • 我的项目中有:https://www.primefaces.org/primereact/#/fullcalendar 我一天有2个事件,我通过以下代码找到了第一个事件: 我需要找到第二个或更多的事件。 UPD如何在第二天工作//div[@class='fc-entent-bone eton'][.//td[@data-date='2019-09-03']]//tbody/tr/td[计数(//t

    • 问题内容: 我想找到使用XPath基于文本的任何WebElement。 基本上,我要通过文本检索的WebElement包含一个输入元素。 我目前正在使用, 找不到上面的WebElement,但通常可以检索所有 其他Web元素。 甚至, 没有给我任何结果。虽然我对精确的文字匹配感兴趣。 我正在寻找一种通过文本来查找Web元素的方法,该文本 对Web元素内部存在的元素不重要。如果文本匹配,则应返回 W

    • 问题内容: 我的网页中有9行6列的表格。我想搜索文本“ MakeGoodDisabled- Programwise_09_44_38_461(n)”并获取单元格的xpath。我使用了以下内容,但由于无法在页面上找到文本而失败。你能帮忙吗?我正在使用Selenium Webdriver Junit对此进行编码。 问题答案: 我的意图是在表中查找文本并在同一行中获取相应的下一列值。我以为我将用所需的列

    • 我想找到任何基于使用XPath的文本的WebElement。 我感兴趣的网页元素, 它的HTML, 基本上,我试图通过文本检索的WebElement包含一个输入元素。 我目前使用的, 它找不到上面的WebElement,但通常可以检索所有其他web元素。 即使 没有给我任何结果。虽然我对精确的文本匹配感兴趣。 我正在寻找一种通过文本查找web元素的方法,该文本与web元素中存在的元素无关。如果文本