You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Node.js版Selenium WebDriver获取指定父元素下的子div元素数量

解决Selenium获取指定容器下子元素数量的问题

嘿,我来帮你搞定这个问题!你当前的代码问题出在定位方式的错误使用上,咱们一步步来修正:

问题所在

你用了By.className(".acp-wrap js-acp-wrap>div"),但By.className()方法只能接收单个类名作为参数,不能直接写CSS选择器的复合语法(比如多个类、子元素选择器>这些都不支持),所以这行代码根本定位不到目标元素。

正确的实现方式

我们需要改用By.cssSelector()来写复合选择器,这样才能精准定位到带有acp-wrapjs-acp-wrap两个类的容器,再获取它下面的直接子div元素。

方法一:一步到位定位子元素

// 直接通过CSS选择器定位所有目标子div
const acpElements = await driver.findElements(By.cssSelector(".acp-wrap.js-acp-wrap > div"));
// 获取元素数量
const elementCount = acpElements.length;
console.log(`找到的div元素数量:${elementCount}`);

方法二:先定位容器再找子元素(更清晰)

// 先定位到目标容器(同时拥有两个类的div)
const acpWrapContainer = await driver.findElement(By.cssSelector(".acp-wrap.js-acp-wrap"));
// 再获取容器下的直接子div元素
const acpElements = await acpWrapContainer.findElements(By.cssSelector("> div"));
// 统计数量
const elementCount = acpElements.length;
console.log(`找到的div元素数量:${elementCount}`);

额外注意事项

  • 如果你用的是异步版本的Selenium(大部分现代环境都是),记得加上await关键字,否则findElements会返回Promise对象,无法直接获取length
  • 为了避免页面未加载完成导致定位失败,建议加上显式等待,确保容器元素已经出现:
const { WebDriverWait, until } = require('selenium-webdriver');

// 等待容器元素可见,最长等待10秒
const acpWrapContainer = await new WebDriverWait(driver, 10).until(
  until.elementLocated(By.cssSelector(".acp-wrap.js-acp-wrap"))
);
// 再获取子元素
const acpElements = await acpWrapContainer.findElements(By.cssSelector("> div"));
const elementCount = acpElements.length;

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

火山引擎 最新活动