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

如何在Selenium JavaScript中遍历class为sponge的动态div容器并正确获取每个容器内的详情?

解决动态容器遍历中重复获取同一内容的问题

你的问题出在XPath的定位逻辑上!你当前用的//div[2]/div[1]/div/p是绝对路径查询——它会从整个HTML文档的根节点开始匹配元素,而不是限定在当前遍历的containers[t]容器内部查找。所以不管循环到第几个容器,它都会返回文档中第一个符合该路径的元素内容,自然就重复输出第一个容器的结果了。

修改后的代码

把XPath改成相对路径,在开头加上./(表示从当前元素的上下文范围开始查找),这样就能精准定位到当前容器内的目标元素:

const containers = await driver.findElements(By.className(`sponge`));
for(let t = 0; t < containers.length; t++){
  // 用./开头的相对XPath,限定在当前containers[t]内部查找
  let runner = await containers[t].findElement(By.xpath(`./div[2]/div[1]/div/p`)).getText();
  console.log(runner);
}

额外优化建议

  • 尽量用更稳定的定位方式,比如给目标元素添加唯一class或data属性,避免依赖层级过深的XPath——页面结构微调时,这种定位逻辑不容易失效。
  • 可以加上异常处理,防止某个容器内找不到目标元素导致整个循环中断:
const containers = await driver.findElements(By.className(`sponge`));
for(let t = 0; t < containers.length; t++){
  try {
    let runner = await containers[t].findElement(By.xpath(`./div[2]/div[1]/div/p`)).getText();
    console.log(runner);
  } catch (err) {
    console.log(`第${t+1}个容器未找到目标元素:`, err);
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:12:35