python selenium 说 xpath 表达式无效

标签 python selenium xpath

我试图用 Selenium 来锻炼,我尝试了这个:

phone = driver.find_element_by_xpath(("//table[@class='contact_info_table']/tbody/tr/td[contains(text(), r'\+[0-9]*']"))

为了尝试获取表中的电话号码。该表的 HTML 如下:

<table class="contact_info_table">
<tbody>
    <tr>
        <th>......</th>
        <td>
            . . .
        </td>
    </tr>

    <tr>
        <th>......</th>
        <td>
            . . .
        </td>
    </tr>

    <tr>
        <th>Telefono:</th>
        <td><img style="vertical-align:middle; display: inline-block; margin-right: 10px;" src="../img/flags/it.png" title="Italia">+1234567890</td>
    </tr>

我需要做的是获取最后一个tr中的1234567。我做错了什么?

我得到的错误是:

InvalidSelectorException: Message: Given xpath expression "//table[@class='contact_info_table']/tbody/tr/td[contains(text(), r'\+[0-9]*']]" is invalid: SyntaxError: The expression is not a legal expression.

谢谢。

最佳答案

看起来您在路径的一部分中错过了括号 - 在正则表达式之后,您有两个结束 ]],但您需要一个 ) 来替换倒数第二个 ] 以关闭 contains 查询:

//table[@class='contact_info_table']/tbody/tr/td[contains(text(), r'\+[0-9]*')]

我也不确定您使用的正则表达式是否是 XPath 的有效语法。我认为您需要在 XPath 中使用 matches() 方法 - 像这样:

/td[matches(text(), '\+[0-9]*']]

我用 matches 替换了你的 contains ,并从你的正则表达式中删除了前面的 r 因为我认为你的表达式只需要是 '\+[0-9]*'。希望这会有所帮助。

您可能根本不需要使用正则表达式来查找您要查找的元素。下面是一个备用 XPath,它不使用正则表达式,但仍然通过获取所需的 td 元素作为前面的 th 的同级元素来定位元素:

//th[text()='Telefono:']//following-sibling::td

因此,要获取电话号码,您可以使用.text:

phone = driver.find_element_by_xpath("//th[text()='Telefono:']//following-sibling::td").text

关于python selenium 说 xpath 表达式无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58868212/

相关文章:

python - 多步预测 LSTM 模型

java - 测试运行了两次并且没有关闭

python - Scrapy xpath 返回表中每一行的结果,而不仅仅是选定的行

javascript - 从 HTML 表获取 href 链接的策略

java - 如何使用 Selenium 和 Java 通过 sendKeys 方法传递双引号字符串

xslt - 如何根据其他元素的文本节点内的值更改 HTML 文档的元素顺序

python - 透明继承Django模型属性

python - Django——删除模板中 Decimal 的尾随零

python - 使用 Python 获取 Youtube 数据

java - Selenium同时控制多个浏览器