<div>
<div>
<div>
<h1 >text1<h1>
<div>
<div>
<div>
<div>
<p> some text <p>
我想要<h1>text1<h1>
后面的<p>some text<p>
的XPath
根据您对结构的了解程度,您可以使XPath更加具体,如果您需要担心空白,请决定是否可以使用=
或应该使用contains()
,或者在比较之前使用normalize-space()
规范化空白。
但是,首先识别h1
元素,然后使用following::
轴以p
:为目标
//h1[. = "text1"]//following::p[contains(text(), "some text")]
不完全清楚OP显示的div是否在同一级别,但当它们在同一个级别时,并且您不想依赖于嵌套div的数量,您可以使用:
//div[.//h1[contains(text(),'text1')]]/following-sibling::div//p[contains(.,'some text')]
如果您可以依赖于嵌套div的数量,那么下面的XPath肯定会执行更好的
//div[div/div/h1[contains(text(),'text1')]]/following-sibling::div/div/div/div/p[contains(.,'some text')]
如果;一些文本";是唯一的,您可以简单地使用以下XPath
//p[contains(text(),'some text')]
或
//*[contains(text(),'some text')]
或
//p[text()='some text']
或
//*[text()='some text']
如果您想在text1
的基础上编写some text
的Xpath。
Xpath:
//h1[contains(text(),'text1')]/following-sibling::h1/descendant::p[last()]/preceding-sibling::p
阅读更多关于xpath轴在这里
这将是上面p标记的xpath包含"一些文本";
//div//div//div//div//p