Javascript 使用木偶演员选择角色

Javascript 使用木偶演员选择角色,javascript,dom,puppeteer,Javascript,Dom,Puppeteer,我正试图用Puppeter从页面中提取一些URL 但是,我的脚本返回的是未定义的 const puppeteer = require('puppeteer'); async function run() { const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']}); const page = await browser.newPage();

我正试图用Puppeter从页面中提取一些
URL

但是,我的脚本返回的是
未定义的

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);

我是否试图错误地访问我的
项目
HTMLCollection
?我错过了什么?谢谢。

Puppeter无法从
evaluate
语句返回不可序列化的值(请参阅和以下内容)

解决这一问题的一种方法是:

let projects = await page.evaluate((sel) => {

        return document.getElementsByClassName(sel)[0].href;
    }, 'homepage-project-image');
请记住,
document.getElementsByCassName
返回
HTMLCollection
,因此,如果要迭代结果,需要类似以下内容:

 let projects = await page.evaluate((sel) => {
            return Array.from(document.getElementsByClassName(sel)).map(node => node.href);
        }, 'homepage-project-image');

令人惊叹的。非常感谢。