如何在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
相关产品推荐
相关产品推荐

