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

如何在Puppeteer的ElementHandle中执行querySelector并获取innerHTML?

在Puppeteer的ElementHandle集合内部执行选择器并获取innerHTML

你已经通过page.$x()获取到了ElementHandle数组theXpath,接下来可以通过遍历数组,在每个ElementHandle上下文内执行目标选择器,进而获取元素的innerHTML,具体实现如下:

单个匹配元素的场景

如果每个父ElementHandle内只会有一个匹配目标选择器的元素,使用$eval方法:

// 遍历所有从Xpath获取到的ElementHandle
for (const element of theXpath) {
  try {
    // 在当前ElementHandle内部查找目标选择器对应的元素,获取其innerHTML
    const targetInnerHTML = await element.$eval(
      "div > div > span > span:nth-of-type(2)",
      el => el.innerHTML
    );
    console.log(targetInnerHTML);
    // 这里可以添加对innerHTML的后续处理逻辑
  } catch (err) {
    // 处理当前ElementHandle内找不到目标元素的情况
    console.log("当前父元素中未找到匹配选择器的节点");
  }
}

多个匹配元素的场景

如果每个父ElementHandle内可能存在多个匹配目标选择器的元素,使用$$eval方法获取所有匹配元素的innerHTML数组:

for (const element of theXpath) {
  try {
    // 获取当前ElementHandle内所有匹配选择器元素的innerHTML数组
    const targetInnerHTMLList = await element.$$eval(
      "div > div > span > span:nth-of-type(2)",
      els => els.map(el => el.innerHTML)
    );
    console.log(targetInnerHTMLList);
    // 处理innerHTML数组的逻辑
  } catch (err) {
    console.log("当前父元素中未找到匹配选择器的节点");
  }
}

关键说明

  • element.$eval(selector, pageFunction):在当前ElementHandle的作用域内,查找第一个匹配selector的元素,将该元素传入pageFunction执行后返回结果。
  • element.$$eval(selector, pageFunction):在当前ElementHandle的作用域内,查找所有匹配selector的元素,将元素数组传入pageFunction执行后返回结果。
  • 添加try/catch是为了避免因个别父元素内无匹配节点导致整个流程中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:50:26