如何通过DOM XPath选择嵌套<p><p>与</p></p>标签间的内容?
解决嵌套
标签的内容选择问题
问题根源
浏览器会自动修正HTML中的无效嵌套标签,你提供的<p><p>TEXT I WANT TO SELECT</p></p>在实际渲染的DOM里会被解析成:
<div class="col-sm-5"> <h2>Title</h2> <p></p> <p>TEXT I WANT TO SELECT</p> <p></p> </div>
这就是你之前的XPath无法正确选中目标内容的核心原因。
正确选择方式
方法1:XPath选择器
- 精准匹配文本内容:
//p[text()='TEXT I WANT TO SELECT'] - 模糊匹配(适用于文本有变动的场景):
//p[contains(text(), 'TEXT I WANT TO SELECT')] - 结合父容器定位(避免全局匹配干扰):
//div[@class='col-sm-5']/p[text()='TEXT I WANT TO SELECT']
方法2:CSS选择器
- 直接匹配文本(部分工具支持):
p:has-text('TEXT I WANT TO SELECT') - 结合父容器+位置定位:
.col-sm-5 p:nth-child(3)
(解析后目标<p>是父容器下第三个子元素,<h2>为第一个,空<p>为第二个)
特殊场景:基于原始未修正HTML操作
如果是直接在未被浏览器解析的原始HTML源码中操作,可使用:
//p/p/text()
这种情况较少见,因为多数工具会遵循浏览器的DOM解析规则。
内容的提问来源于stack exchange,提问作者Bart van Hoek
相关产品推荐
相关产品推荐

