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

Puppeteer遍历父节点子元素时innerText返回undefined求助

Puppeteer遍历子元素获取innerText返回undefined的解决方法

你遇到的核心问题是浏览器上下文和Node.js上下文混淆:

  • atsiskaitymas1.evaluate(x => Object.values(x.children))是在浏览器环境中执行代码,返回的是子元素的序列化普通对象(并非Puppeteer的ElementHandle实例),这些对象在Node.js环境里没有innerText属性,所以打印结果为undefined。
  • 你尝试的i.evaluate和i.getAttribute('innerText')都无效:前者是因为i不是ElementHandle,没有evaluate方法;后者是因为innerText是DOM元素的属性,不是HTML标签属性,用getAttribute根本无法获取。

方案一:在浏览器上下文直接提取所有子元素文本(推荐)

直接在evaluate中完成子元素遍历和文本提取,一次性将结果返回给Node.js,效率更高:

let Atsiskaitymai = await page.$$("#slenkanti_dalis > table > tbody > tr")

for (const atsiskaitymas1 of Atsiskaitymai) {
  // 在浏览器环境遍历tr的子元素,提取innerText并返回数组
  const childTexts = await atsiskaitymas1.evaluate(tr => {
    return Array.from(tr.children).map(child => child.innerText.trim());
  });
  // 在Node.js环境打印结果
  childTexts.forEach(text => console.log(text));
}

方案二:用ElementHandle逐个遍历子元素

如果需要对每个子元素执行更多操作(如点击、获取其他属性),可以用$$方法获取子元素的ElementHandle实例,再逐个提取文本:

let Atsiskaitymai = await page.$$("#slenkanti_dalis > table > tbody > tr")

for (const atsiskaitymas1 of Atsiskaitymai) {
  // 获取当前tr的所有直接子元素('> *'确保只获取直接子节点)
  const childElements = await atsiskaitymas1.$$('> *');
  for (const child of childElements) {
    // 对每个ElementHandle调用evaluate获取innerText
    const text = await child.evaluate(el => el.innerText.trim());
    console.log(text);
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:06:10