我明白那个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);
}
Problem
元素句柄作为 Node.js 和浏览器运行时之间的抽象层是必需的。实际的 DOM 元素不会发送到 Node.js 环境。
这意味着当您想要从元素获取属性时,必须将数据传输到浏览器(使用哪个 DOM 元素)并返回(结果)。
Solution
因此,结果为await els[i].$('img')
并不是真正的 DOM 元素,而只是链接到浏览器环境中的元素的包装器。要获取该属性,您必须使用类似的函数elementHandle.$eval https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#elementhandleevalselector-pagefunction-args-1:
const imgSrc = await els[i].$eval('img', el => el.getAttribute('src'));
这将运行querySelector
对给定元素执行函数并执行给定函数以返回其属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)