使用Puppeteer选择href属性

4

我正在尝试使用 Puppeteer 从 这个 页面中提取一些 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?我错过了什么吗?谢谢。
1个回答

4

Puppeteer无法从evaluate语句返回非可序列化的值(请参见此问题和以下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');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接