You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用XPath区分id、class等属性相同仅顺序不同的多个元素

你遇到的这个问题的根因为XPath运算优先级导致://选择轴的优先级低于谓词[],你写的//input[@id='group[2][325]'][1]实际会被解析为「查找所有满足两个条件的input元素:① id属性为group[2][325];② 该元素是其直接父节点下的第一个input子元素」,而非你预期的「从所有匹配id的元素集合中取第一个」。

对应的解决方法如下:

  • 最通用的解决方式是给匹配路径整体加括号,先把符合属性条件的元素整合成一个独立节点集,再通过谓词取指定位置的元素,下标从1开始计数:
    注意一定要给整段匹配路径加括号,否则谓词不会作用于全局匹配结果
    取第一个元素:(//input[@id='group[2][325]'])[1]
    取第二个元素:(//input[@id='group[2][325]'])[2]
    取第三个元素:(//input[@id='group[2][325]'])[3]
  • 如果要提升定位稳定性,避免页面元素顺序调整导致定位失效,你也可以补充元素的上下文特征缩小筛选范围,比如根据元素所属的父容器、相邻元素特征筛选,示例:如果第一个目标元素属于id为test_form的表单,可写为//form[@id='test_form']//input[@id='group[2][325]']
  • 额外提醒:HTML规范中id属性应为全局唯一值,你当前页面出现3个相同id的元素属于不规范实现,有条件的话可以推动前端研发修正该问题,后续元素定位会更便捷。

内容的提问来源于stack exchange,提问作者Tknoobs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:15:00