为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过Puppeteer获取元素的子代

如何通过Puppeteer获取元素的子代

慕容708150 2021-04-20 17:14:24
我知道puppeteer它拥有自己的句柄而不是标准DOM元素,但是我不明白为什么我不能通过找到的元素继续相同的查询,因为const els = await page.$$('div.parent');for (let i = 0; i < els.length; i++) {    const img = await els[i].$('img').getAttribute('src');    console.log(img);    const link = await els[i].$('a').getAttribute('href');    console.log(link);}
查看完整描述

2 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

问题

元素句柄作为Node.js和浏览器运行时之间的抽象层是必需的。实际的DOM元素不会发送到Node.js环境。

这意味着当您想从元素中获取属性时,必须将数据传输到浏览器(要使用哪个DOM元素),然后再传输回(结果)。

解决方案

因此,结果await els[i].$('img')实际上不是DOM元素,而是链接到浏览器环境中的元素的包装器。要获取属性,您必须使用类似elementHandle.$eval以下的函数:

const imgSrc = await els[i].$eval('img', el => el.getAttribute('src'));

这将在querySelector给定元素上运行该函数并执行给定函数以返回其属性。


查看完整回答
反对 回复 2021-04-29
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

您可以使用 $eval


onst els = await page.$$('div.parent');


for (let i = 0; i < els.length; i++) {

    const img = await els[i].$eval('img', i => i.getAttribute('src'));

    console.log(img);

    const link = await els[i].$eval('a', a => a.getAttribute('href'));

    console.log(link);

}


查看完整回答
反对 回复 2021-04-29
  • 2 回答
  • 0 关注
  • 551 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信