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

如何在Selenium JS中获取子节点数量?优化网页爬取代码

解决Selenium JS中动态获取子节点数量的问题

我懂你现在的困扰——硬编码循环范围太死板,一旦教师数量变动代码直接失效。其实在Selenium JavaScript里,你完全可以通过动态获取节点数量来解决这个问题,完美适配新增的教师条目,下面给你具体的实现思路和代码:

核心思路:先获取所有元素再遍历

不用再纠结循环的起始和结束值,我们可以先定位到目标<tbody>,然后直接获取它下面所有的<tr>元素,通过元素数组的长度来动态确定遍历范围,这样不管新增多少教师都能自动适配。

代码实现(两种写法可选)

写法1:Promise链式调用

// 初始化教师姓名列表
let listOfFaculties = [];

// 先定位到目标tbody元素(请根据实际页面结构调整定位器,比如xpath或css选择器)
driver.findElement(By.css("tbody"))
  .then(tbodyElement => {
    // 获取当前tbody下所有的tr子元素
    return tbodyElement.findElements(By.css("tr"));
  })
  .then(trElements => {
    // 遍历所有tr元素,提取姓名
    return Promise.all(trElements.map(trElement => {
      // 这里需要根据页面实际结构,定位到tr里存储教师姓名的元素(比如第一个td)
      return trElement.findElement(By.css("td:first-child"))
        .then(nameEl => nameEl.getText())
        .then(name => {
          listOfFaculties.push(name);
          return name;
        });
    }));
  })
  .then(() => {
    console.log("教师姓名列表:", listOfFaculties);
    console.log("教师总人数:", listOfFaculties.length);
  })
  .catch(err => {
    console.error("获取教师信息出错:", err);
  });

写法2:async/await(更简洁易读)

async function fetchFacultyNames() {
  let listOfFaculties = [];
  try {
    // 定位目标tbody
    const tbodyEl = await driver.findElement(By.css("tbody"));
    // 获取tbody下所有tr元素
    const trElements = await tbodyEl.findElements(By.css("tr"));
    
    // 遍历每个tr提取姓名
    for (const tr of trElements) {
      const nameEl = await tr.findElement(By.css("td:first-child"));
      const name = await nameEl.getText();
      listOfFaculties.push(name);
    }

    console.log("教师姓名列表:", listOfFaculties);
    console.log("教师总人数:", listOfFaculties.length);
    return listOfFaculties;
  } catch (err) {
    console.error("获取教师信息失败:", err);
    throw err;
  }
}

// 调用函数
fetchFacultyNames();

注意事项

  • 请根据你爬取页面的实际HTML结构,调整By.css("tbody")、By.css("td:first-child")这类定位器,确保能精准找到目标元素。
  • Selenium JS的操作大多是异步的,所以一定要用Promise或async/await处理,避免出现未获取到元素就执行后续代码的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:22:14