【发布时间】:2015-10-26 05:39:06
【问题描述】:
我编写了一个 xpath 来使用 selenium c# 从网页中抓取元素。
这里是 XPath
tbody/tr[@backcolor]/td/b/a[contains(text(),"match text")]
在我发现 match text 出现重复之前,这一切正常。因此,在网页上,我有两个带有 match text 的元素
一个是match text,另一个是match text 9000
现在,我只需点击match text。所以,我写了下面的XPath
table/tbody/tr[@bgcolor]/td/b/a[text()=" match text"]
请注意,匹配文本在网页上具有前导空格。上面的 Xpath 没有用。我已经用 Firefox 的 Fire Path 扩展检查了这一点。
谁能给我推荐一个 Xpath,它可以找到与 match text 完全匹配的东西。假设匹配文本可以包含任意数量的前导空格。
我也尝试过使用normalize-space(),但这也没有用。这是我试过的
text()[normalize-space(.)='match']
我发现了一些关于 SO 的问题,但没有帮助。
感谢您的帮助。
更新:
感谢您的回答,但没有一个对我有用。
我也提到了这两个字符串
- 匹配文字
- 匹配文本9000
在我的代码中,我将在 foreach 循环中迭代它们。所以,我不能保证我会得到 9000 作为第二个元素。
我已经尝试了使用 Firefox 的 FirePath 扩展程序提到的所有答案,但网页上没有选择任何内容。
如前所述,我在匹配文本之前有前导空格。
HTML:(匹配 xpath)
<html>
<body>
<table>
<tbody>
<tr><td><b><a class="s7intext" href="#"> match text</a></b></td></tr>
<tr><td><b><a class="s7intext" href="#"> match text random</a></b></td></tr>
</tbody>
</table>
</body>
</html>
这是我页面中的 HTML,其中包含 &nbsp; 个字符。在match text 之前有两个&nbsp; 字符和一个额外的空格。我正在抓取元素的站点是客户端站点。我不能说他修改他的 HTML 就可以了。
【问题讨论】:
-
“我也尝试过使用 normalize-space(),但也没有用。” (1) 你到底用 normalize-space() 尝试了什么? (2) 当你说事情没有奏效时,实际上发生了什么? XPath 表达式没有选择任何内容吗?有错误信息吗?
-
在某个阶段您已经修改了问题,因此您的输入现在包括不间断的空格字符。这意味着该编辑之前的所有答案都将不再有效。以如此根本的方式改变问题会导致很大的混乱,最好开始一个新问题。 normalize-space() 去除“空白”;为此,不间断空格不被视为空白。要剥离它们,请使用 translate() 函数。
标签: c# selenium xpath exact-match