gpt4 book ai didi

c# - 使用 XPath 精确匹配字符串

转载 作者:太空宇宙 更新时间:2023-11-03 21:19:26 26 4
gpt4 key购买 nike

我编写了一个 xpath 来使用 selenium c# 从网页中抓取元素。

这是XPath

tbody/tr[@backcolor]/td/b/a[contains(text(),"match text")]

在我发现 match text 出现重复之前,这一切都很好。所以,在一个网页上,我有两个带有 match text

的元素

一个带有匹配文本,另一个带有匹配文本9000

现在,我只需要为匹配文本执行点击。所以,我写了下面的 XPath

table/tbody/tr[@bgcolor]/td/b/a[text()="   match text"]

请注意,匹配文本在网页上有前导空格。上面的 Xpath 没有工作。我已经使用 Firefox 的 Fire Path 扩展程序检查了这一点。

任何人都可以向我推荐一个 Xpath,它可以找到与 匹配文本 完全匹配的内容。假设匹配文本可以包含任意数量的前导空格。

我也尝试过使用 normalize-space() 但这也没有用。这是我试过的

text()[normalize-space(.)='match']

我在 SO 上发现了一些问题,但没有帮助。

感谢您的帮助。

更新:

感谢您的回答,但没有一个对我有用。

我还提到了这两个字符串

  • 匹配文本
  • 匹配文本 9000

在我的代码中,我将在 foreach 循环中迭代它们。所以,我不能保证我会得到 9000 作为第二个元素。

我已经尝试了使用 FirePath FirePath 扩展提到的所有答案,但在网页上没有选择任何内容。

如前所述,我在匹配文本之前有前导空格。

HTML:(匹配 xpath)

<html>
<body>
<table>
<tbody>
<tr><td><b><a class="s7intext" href="#">&nbsp;&nbsp; match text</a></b></td></tr>
<tr><td><b><a class="s7intext" href="#">&nbsp;&nbsp; match text random</a></b></td></tr>
</tbody>
</table>
</body>
</html>

这是我页面中的 HTML,其中包含   个字符。在匹配文本之前有两个 字符和一个额外的空格。我正在抓取元素的站点是一个客户站点。我不能让他修改他的 HTML。

最佳答案

对所有答案的评论:最好避免使用 text(),因为这会使它对评论节点敏感。此外,一些(不正确的)XPath 实现无法连接相邻的文本节点,这些节点可能存在于以编程方式构造的 DOM 中。因此最好始终匹配元素的字符串值,而不是文本节点。无论如何,它更简单。这是正确的解决方案:

tbody/tr[@backcolor]/td/b/a[normalize-space(.) = 'match text']

关于c# - 使用 XPath 精确匹配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31798733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com