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

使用Puppeteer的page.$$eval获取DOM全部链接失败,原因何在?

搞定Puppeteer获取所有链接的问题

嘿,我知道你为啥只拿到一个链接了——问题出在你用page.$$eval()的回调函数逻辑上!

为啥结果不对?

先给你拆解下page.$$eval()的工作方式:它会先在浏览器里找到所有匹配a选择器的元素,把它们打包成一个数组传给你的回调函数。但你写的a => a.href,是把整个元素数组当成单个<a>元素来取href属性了!

数组本身哪有href啊?这时候浏览器就会“瞎凑数”,大概率给你返回的是当前页面的URL(也就是window.location.href),所以你才只看到那一个结果,根本没遍历到所有12个链接。

正确的写法应该是这样

你需要在回调里遍历这个元素数组,用map逐个提取每个<a>的href:

const hrefs = await page.$$eval('a', links => links.map(link => link.href));

运行这个代码,console.log(hrefs)就能输出所有12个链接的数组了!

额外给你个验证小技巧

如果你担心是不是选择器没匹配到足够的元素,可以先测一下匹配数量:

const totalLinks = await page.$$eval('a', links => links.length);
console.log(totalLinks); // 这里应该输出12,确认下是不是真的匹配到了所有元素

这样就能先排除选择器的问题,确保后续逻辑没问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:43:22