我正在尝试使用Puppeteer从this页面中提取一些urls
。
但是我所有的脚本都返回了undefined
const puppeteer = require('puppeteer');
async function run() {
const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});
const page = await browser.newPage();
await page.goto('https://divisare.com/');
let projects = await page.evaluate((sel) => {
return document.getElementsByClassName(sel)
}, 'homepage-project-image');
var aNode = projects[0].href;
console.log(aNode);
console.log(projects.length)
browser.close();
}
run();
但是,当我运行如下所示的内容时,我至少能够正确获取要提取的链接数。
let projects = await page.evaluate((sel) => {
return document.getElementsByClassName(sel).length
}, 'homepage-project-image');
console.log(projects);
我是否尝试错误地访问我的
projects
HTMLCollection
?我在这里想念什么?谢谢。 最佳答案
Puppeteer无法从evaluate
语句返回不可序列化的值(请参阅this issue和以下PR)
解决此问题的一种方法是:
let projects = await page.evaluate((sel) => {
return document.getElementsByClassName(sel)[0].href;
}, 'homepage-project-image');
请记住,
document.getElementsByClassName
返回HTMLCollection
,因此,如果要遍历结果,则需要类似以下内容: let projects = await page.evaluate((sel) => {
return Array.from(document.getElementsByClassName(sel)).map(node => node.href);
}, 'homepage-project-image');