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

标签 html xml selenium xpath

假设我们有一个基本如下所示的 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/

最佳答案

注意contains()函数。

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

这个 XPath,

//td[.='8']

将选择 string-value 等于 td 的所有 8 元素。

或者,这个 XPath,

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

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

注意事项:

  • 即使 8 位于另一个元素(例如 a)中,两者也能正常工作 a , b , span , div
  • 两者都匹配 <td>gr8t</td><td>123456789</td> 等。
  • 使用 normalize-space() 将忽略前导或尾随空格 围绕 8

另见:

关于html - 如何对特定文本使用 XPath contains()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39650007/

相关文章:

javascript - 如何在innerhtml生成的文本框中插入自动完成jquery

xml - PLSQL的extractValue方法中不正确的XPath

python - 如何获取python-selenium中元素的 'state'?

python - Selenium 在 alpine 3.6 容器上运行

java - 使用 Groovy 从 XML 中删除所有空节点

java - Selenium Webdriver (Java) - 根据条件选择特定元素

Javascript 选项更改头部 style.css

html - 调整浏览器大小时元素正在移动

javascript - DOM修改时点击事件丢失

xml - 强制解析攻击