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

Puppeteer抓取a标签innerText和href返回异常如何解决

问题原因

你使用的page.$$方法仅会返回匹配选择器的ElementHandle对象数组,不支持传入回调函数执行浏览器端求值逻辑,所以你拿到的是和页面实例绑定的元素句柄信息,而非目标文本或链接。

修复代码

你需要改用page.$$eval方法,该方法的第二个参数为浏览器端执行的回调函数,会自动接收匹配到的元素数组作为入参,返回值会直接传递到Node.js环境。

提取a标签文本

const nodeChildren = await page.$$eval('.hash-tag a', (elements) => {
  return elements.map(option => option.innerText.trim())
});
console.log(nodeChildren);

提取a标签href属性

const nodeHrefs = await page.$$eval('.hash-tag a', (elements) => {
  return elements.map(option => option.getAttribute('href'))
});
console.log(nodeHrefs);

同时提取文本和href

const nodeInfos = await page.$$eval('.hash-tag a', (elements) => {
  return elements.map(option => ({
    text: option.innerText.trim(),
    href: option.getAttribute('href')
  }))
});
console.log(nodeInfos);
注意事项
  • 选择器直接定位到.hash-tag下的a标签,减少不必要的层级遍历,逻辑更简洁
  • page.$$eval的回调运行在浏览器沙箱环境中,无法直接访问Node.js环境的变量,如有传参需求可以放在方法的第三个参数位置传入
  • 如果你需要对匹配元素做点击、输入等交互操作,才需要用page.$$获取ElementHandle后逐个处理,单纯提取属性/文本优先用page.$$eval性能更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:06:07