为何我的XPath使用following-sibling无效?如何选中活跃页后的元素?
Hey,我来帮你搞定这个XPath的问题~
首先你原来的XPath失效主要有两个原因:一是硬写了li[2],这完全依赖活跃页的固定位置,太不灵活;二是你找的是当前<a>标签的同级兄弟,但目标的a和input其实在活跃页所在<li>的下一个<li>里,路径根本没找对地方。
根据你的需求,我分两种常见场景给你最简解决方案:
场景1:active_page类在<li>标签上
比如你的HTML结构是这样的:
<div id="pagination"> <ul class="zPagination"> <li><a href="https://www.test.com/page&pagination=10">«</a></li> <li class="active_page"><a href="#">3</a></li> <li><a href="#">4</a><input type="hidden" value="4"></li> </ul> </div>
最简XPath可以直接定位到活跃li的下一个li,再筛选里面的a和input:
//li[@class="active_page"]/following-sibling::li[1]//*[self::a or self::input]
如果只想分别提取单个元素,也可以拆成两条:
//li[@class="active_page"]/following-sibling::li[1]/a[1] <!-- 下一个a标签 --> //li[@class="active_page"]/following-sibling::li[1]/input[1] <!-- 下一个input标签 -->
场景2:active_page类在<a>标签上
比如HTML结构是:
<div id="pagination"> <ul class="zPagination"> <li><a href="https://www.test.com/page&pagination=10">«</a></li> <li><a class="active_page" href="#">3</a></li> <li><a href="#">4</a><input type="hidden" value="4"></li> </ul> </div>
这时候需要先找到带active_page的a,再回到它的父节点li,然后找下一个li里的元素:
//a[@class="active_page"]/../following-sibling::li[1]//*[self::a or self::input]
同样,拆成单个元素的写法:
//a[@class="active_page"]/../following-sibling::li[1]/a[1] //a[@class="active_page"]/../following-sibling::li[1]/input[1]
核心思路就是:先精准定位到活跃页所在的li节点,再用following-sibling::li[1]找到它的下一个分页项li,最后在这个li里提取你要的a和input元素——这样不管活跃页在哪个位置,XPath都能稳定生效~
内容的提问来源于stack exchange,提问作者Mkgl
相关产品推荐
相关产品推荐

