在我的网页中,有一个 div ,其中 class 名为 Test .
div
class
Test
如何用 XPath 找到它?
XPath
我只是提供这个作为答案,正如Tomalak在很久以前作为对meder的回答的评论
//div[contains(concat(' ', @class, ' '), ' Test ')]
以前的答案可以提供有用的功能:
function matchClass($className) { return "[contains(concat(' ', normalize-space(@class), ' '), ' $className ')]"; }
然后将函数调用连接到查询中 .
最轻松的方式..
//div[@class="Test"]
假设您要按照描述找到 <div class="Test"> .
<div class="Test">
使用XPath的 ONLY 正确方法:
//div[contains(concat(" ", normalize-space(@class), " "), " Test ")]
函数 normalize-space 剥离前导和尾随空格,并且还用单个空格替换空白字符序列 .
normalize-space
如果不需要许多这些Xpath查询,您可能希望使用将CSS选择器转换为XPath的库,因为CSS选择器通常比XPath查询更容易读取和写入 . 例如,在这种情况下,您可以使用 div[class~="foo"] 和 div.foo 来获得相同的结果 .
div[class~="foo"]
div.foo
我能找到的一些图书馆:
For JavaScript :css2xpath&css-to-xpath
For PHP :CssSelector Component
For Python :cssselect
For C# :css2xpath Reloaded
对于 GO :css2xpath
你可以找到像这个例子的元素(所有的css元素)
private By allElementsCss = By.xpath(".//div[@class]");
此选择器应该可以工作,但如果用适当的标记替换它会更有效:
//*[contains(@class, 'Test')]
或者,因为我们知道所搜索的元素是 div :
//div[contains(@class, 'Test')]
但由于这也会匹配 class="Testvalue" 或 class="newTest" 等案例,因此评论中提供的@ Tomalak版本为 better :
class="Testvalue"
class="newTest"
如果您希望确定它将正确匹配,您还可以使用normalize-space函数清除类名周围的杂散空格字符(如@Terry所述):
//div[contains(concat(' ', normalize-space(@class), ' '), ' Test ')]
请注意,在所有这些版本中,*最好由实际希望匹配的任何元素名称替换,除非您希望搜索文档中的每个元素以获取给定条件 .
6 回答
我只是提供这个作为答案,正如Tomalak在很久以前作为对meder的回答的评论
以前的答案可以提供有用的功能:
然后将函数调用连接到查询中 .
最轻松的方式..
假设您要按照描述找到
<div class="Test">
.使用XPath的 ONLY 正确方法:
函数
normalize-space
剥离前导和尾随空格,并且还用单个空格替换空白字符序列 .注意
如果不需要许多这些Xpath查询,您可能希望使用将CSS选择器转换为XPath的库,因为CSS选择器通常比XPath查询更容易读取和写入 . 例如,在这种情况下,您可以使用
div[class~="foo"]
和div.foo
来获得相同的结果 .我能找到的一些图书馆:
For JavaScript :css2xpath&css-to-xpath
For PHP :CssSelector Component
For Python :cssselect
For C# :css2xpath Reloaded
对于 GO :css2xpath
你可以找到像这个例子的元素(所有的css元素)
此选择器应该可以工作,但如果用适当的标记替换它会更有效:
或者,因为我们知道所搜索的元素是
div
:但由于这也会匹配
class="Testvalue"
或class="newTest"
等案例,因此评论中提供的@ Tomalak版本为 better :如果您希望确定它将正确匹配,您还可以使用normalize-space函数清除类名周围的杂散空格字符(如@Terry所述):
请注意,在所有这些版本中,*最好由实际希望匹配的任何元素名称替换,除非您希望搜索文档中的每个元素以获取给定条件 .