一尘不染

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

selenium

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

2|1|28|9|
3|8|5|10|
18|9|8|0|

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

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

我该如何解决?

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


阅读 337

收藏
2020-06-26

共1个答案

一尘不染

请小心该 contains() 功能。

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

这个XPath

//td[.='8']

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

另外,这个XPath

//td[normalize-space()='8']

将选择所有normalize-space()字符串值 等于的*td元素。(normalize-
space()

XPath函数会删除开头和结尾的空白,并用单个空格替换空白字符序列。)
*8

笔记:

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