如何对特定文本使用XPath contains()?

Mas*_*oe2 5 html xml selenium xpath

假设我们有一个HTML表格,基本上是这样的:

2|1|28|9|
3|8|5|10|
18|9|8|0|
Run Code Online (Sandbox Code Playgroud)

我想选择仅包含8个单元格的单元格,即,第2行的第2个单元格和第3行的第3个单元格。

这是我尝试过的://table//td[contains(.,'8')]。它给了我所有包含8的单元格。因此,我也得到了不必要的值28和18。

我该如何解决?

编辑:这是一个示例表,如果您想尝试您的xpath。使用左侧的日历-https : //sfbay.craigslist.org/sfc/

kjh*_*hes 7

请小心该contains()功能。

使用它来测试元素是否包含值是一个常见的错误。它真正要做的是测试字符串是否包含子字符串。因此,采用()的字符串值并测试它是否包含任何子字符串。这可能是您想要的,但通常不是。td[contains(.,'8')]td.'8'

这个XPath

//td[.='8']
Run Code Online (Sandbox Code Playgroud)

将选择所有字符串值等于的td元素。 8

另外,这个XPath

//td[normalize-space()='8']
Run Code Online (Sandbox Code Playgroud)

将选择所有normalize-space()字符串值等于的td元素。(normalize-space() XPath函数会删除开头和结尾的空白,并用单个空格替换空白字符序列。) 8

笔记:

  • 两者都将甚至工作,如果图8是另一种元素如一个的内部 abspandiv,等。
  • 双方将匹配<td>gr8t</td><td>123456789</td>等等。
  • 使用normalize-space()会忽略周围的前导或尾随空白8


jed*_*ans 6

尝试以下 xpath,它将选择整个文本内容而不是部分匹配:

//table//td[text()='8']
Run Code Online (Sandbox Code Playgroud)

编辑:您的示例 HTML 在 td 元素中有一个标签,因此以下内容将起作用:

//table//td/a[text()="8"]
Run Code Online (Sandbox Code Playgroud)

请参阅此处的 php 示例:https : //3v4l.org/56SBn