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

如何获取第一个子元素的XPath?使用//div[@class='input-group']/input[1]返回全部input标签

解决XPath返回所有子元素而非第一个的问题

这是XPath里一个很常见的优先级陷阱问题,我来帮你理清楚~

首先得明确你遇到的核心问题:XPath中括号的作用域优先级。你写的//div[@class='input-group']/input[1],实际逻辑是遍历页面中所有class为input-group的div,然后分别取出每个div下的第一个input元素。如果页面里有多个这样的div,自然会返回多个input节点,这就是你觉得“返回所有input标签”的原因。

根据你的实际需求,有两种解决方案:

需求1:获取整个文档中第一个符合条件的input

如果你只想要页面里第一个class为input-group的div下的第一个input,那需要用括号把整个节点集表达式包裹起来,再取第一个元素:

(//div[@class='input-group']/input)[1]

括号在这里的作用是先把所有符合//div[@class='input-group']/input的节点收集成一个完整的节点列表,然后再从这个列表中选取第一个元素,而不是给每个div单独取第一个子input。

需求2:给每个div[@class='input-group']取第一个子input(但之前写法没生效?)

如果你的需求确实是为每个目标div取第一个input,但之前的写法返回了所有input,那大概率是你之前的表达式写错了(比如没加[1])。不过还有一种特殊情况:如果div下的第一个子节点不是input(比如有文本节点、<span>、<label>等前置节点),但你需要的是div下的第一个子元素(不管标签),那应该用:

//div[@class='input-group']/*[1]

如果还是要限定input标签,那//div[@class='input-group']/input[1]是正确的写法,它只会选取每个div下的第一个input子节点,不会返回该div下的其他input。

额外提示:XPath优先级的坑

记住这个关键区别:

  • //A/B[1]:对每个A节点,选取它的第一个B子节点(多节点结果)
  • (//A/B)[1]:先选取所有A下的B节点,再取这个集合的第一个元素(单节点结果)

这是XPath新手最容易踩的坑之一,搞清楚括号的作用就没问题啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:36:57