Xpath:选择包含类AND的div,其特定子元素包含文本

And*_*ejs 25 xpath

这个SO问题的帮助下,我有一个几乎工作的xpath:

//div[contains(@class, 'measure-tab') and contains(., 'someText')]
Run Code Online (Sandbox Code Playgroud)

然而,这有两个divs:一个是孩子td有一些文本,另一个是孩子span.

如何将其缩小到与span

<div class="measure-tab">
  <!-- table html omitted -->
  <td> someText</td>
</div>

<div class="measure-tab">  <-- I want to select this div (and use contains @class)
  <div>
    <span> someText</span>  <-- that contains a deeply nested span with this text
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

nwe*_*hof 43

为了找到一个div包含某一类span 在任何深度含有一定的文字,请尝试:

//div[contains(@class, 'measure-tab') and contains(.//span, 'someText')]
Run Code Online (Sandbox Code Playgroud)

也就是说,这个解决方案看起来非常脆弱.如果表格恰好包含span您正在查找的文本,则div包含该表格的表格也将匹配.我建议找到一种更强大的过滤元素的方法.例如,通过使用ID或顶级文档结构.

  • 屏幕抓取总是非常脆弱. (6认同)

小智 8

你可以用ancestor.我发现这更容易阅读,因为您实际选择的元素位于路径的末尾.

//span[contains(text(),'someText')]/ancestor::div[contains(@class, 'measure-tab')]
Run Code Online (Sandbox Code Playgroud)


Som*_*ude 7

您可以使用xpath:

//div[@class="measure-tab" and .//span[contains(., "someText")]]

输入:

<root>
<div class="measure-tab">
  <td> someText</td>
</div>
<div class="measure-tab">
  <div>
    <div2>
       <span>someText2</span>
   </div2>
  </div>
</div>
</root>
Run Code Online (Sandbox Code Playgroud)

输出:

    Element='<div class="measure-tab">
  <div>
    <div2>
      <span>someText2</span>
    </div2>
  </div>
</div>'
Run Code Online (Sandbox Code Playgroud)

  • 这将选择跨度而不是 div。 (2认同)