【问题标题】:How to use XPath contains() for specific text?如何将 XPath contains() 用于特定文本?
【发布时间】:2016-09-22 22:47:22
【问题描述】:

假设我们有一个基本上如下所示的 HTML 表格:

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

我想选择只包含 8 个而不包含其他任何内容的单元格,即只有 row2 的第 2 个单元格和 row3 的第 3 个单元格。

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

我该如何解决这个问题?

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

【问题讨论】:

    标签: html xml selenium xpath


    【解决方案1】:

    小心 contains() 函数。

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

    这个 XPath,

    //td[.='8']
    

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

    或者,这个 XPath,

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

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

    注意事项:

    • 即使 8 在另一个元素(例如 a abspandiv
    • 两者都将匹配<td>gr8t</td><td>123456789</td>等。
    • 使用normalize-space() 将忽略前导或尾随空格 围绕8

    【讨论】:

      【解决方案2】:

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

      //table//td[text()='8']
      

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

      //table//td/a[text()="8"]
      

      在此处查看 php 中的示例:https://3v4l.org/56SBn

      【讨论】:

      • 这不起作用。请尝试我现在​​添加到问题的链接中的 xpath。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      • 2018-12-05
      • 2012-06-16
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多