我正在尝试使用XPath for python-selenium。
我使用此链接尝试了教程中的一些XPath:
因此,我尝试了XPaths的这两种变体。
这个表达
//webengagedata//preceding-sibling::*
返回了14条结果
而这个表达
//webengagedata/preceding-sibling::*
返回了9条结果
“ //”如何匹配另外5个结果?
/
与//
一般两者child
(/
)和descendant-or-self
(//
)是在XPath轴。
/
是的缩写/child::node()/
。
使用/
选择节点的直接子。
//
是的缩写/descendant-or-self::node()/
。
用于//
递归选择节点,其子级,其孙级,等等。
/
VS//
与preceding-sibling::*
您的特定问题询问//preceding-sibling::*
和之间的区别/preceding-sibling::*
。
由于您的数据是异地且复杂的,因此让我们考虑一下这种当前且更简单的XML:
<r>
<a/>
<b>
<c/>
<d/>
</b>
</r>
对于此XML,
/r/preceding-sibling::*
由于r
之前没有兄弟姐妹,因此不选择任何内容。/r//preceding-sibling::*
选择所有后代或自的前述同级元素节点的r
。也就是说,a
,b
,c
和d
。(请记住,/r//preceding-sibling::*
它的缩写/descendant-or-self::node()/preceding-sibling::*
,不是 /descendant-or-self::*/preceding-sibling::*
)。请注意,即使b
和d
是没有元素的前辈兄弟姐妹,它们也是文本节点的前辈兄弟姐妹,因为上述XML在b
和之后具有空格d
。如果所有空白都被删除,则仅a
和c
将被选中。/r/descendant::*/preceding-sibling::*
选择所有后代的前述兄弟元素的元素的r
。即a
和c
。请注意,b
并d
没有选择,因为他们没有前面的兄弟元素,以任何后代元素的r
-前面的例子不同,文本节点没有资格。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句