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

相同元素多次出现时如何用css selector或xpath定位第二个匹配元素

定位第二个匹配CSS选择器元素的解决方案

方法1:批量获取元素后按索引取值(最通用稳妥)

findElement 默认只会返回页面中第一个匹配的元素,如果你需要取第N个匹配项,先调用findElements获取所有符合条件的元素列表,再通过索引取值即可(列表索引从0开始,第二个元素对应索引1)。
代码修改如下:

// 先获取所有匹配span.mat-content的元素列表
List<WebElement> matContentList = driver.findElements(By.cssSelector("span.mat-content"));
// 取索引为1的元素即第二个匹配项
WebElement element2 = matContentList.get(1);

注意:使用前建议加显式等待,确保页面已加载至少2个匹配的元素,避免出现索引越界异常。

方法2:直接编写定位到第二个元素的选择器

CSS选择器写法

如果目标元素是同层级下第二个span.mat-content,可以用:nth-of-type伪类:

WebElement element2 = driver.findElement(By.cssSelector("span.mat-content:nth-of-type(2)"));

如果要匹配全局所有span.mat-content的第二个,更推荐用XPath写法,准确率更高:

WebElement element2 = driver.findElement(By.xpath("(//span[contains(@class,'mat-content')])[2]"));

方法3:基于属性差异定位(不推荐)

你给出的两个元素class后缀不同,一个是2587一个是2589,如果这个后缀是固定不变的,也可以用属性模糊匹配:

WebElement element2 = driver.findElement(By.cssSelector("span.mat-content[class$='2589']"));

注意:Angular生成的ng-tns开头的类名后缀通常是动态生成的,页面刷新后可能变化,除非确认该值固定,否则不要用这种写法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:54:04