gpt4 book ai didi

python selenium 说 xpath 表达式无效

转载 作者:行者123 更新时间:2023-12-01 00:22:23 27 4
gpt4 key购买 nike

我试图用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com