web-dev-qa-db-ja.com

puppeteer page.evaluate querySelectorAllは空のオブジェクトを返します

私は操り人形をしよ​​うとしています、これはあなたがそれを実行できるサンプルコードです https://try-puppeteer.appspot.com/

問題は、このコードが空のオブジェクトの配列を返すことです

[{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{ }、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、 {}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{} 、{}、{}、{}、{}、{}、{}、{}]

私は間違いをしていますか?

const browser = await puppeteer.launch();

const page = await browser.newPage();
await page.goto('https://reddit.com/');

let list = await page.evaluate(() => {
            return Promise.resolve(Array.from(document.querySelectorAll('.title')));
        });
console.log(JSON.stringify(list))

await browser.close();
10

Evaluate関数から返される値は、jsonシリアライズ可能である必要があります。 https://github.com/GoogleChrome/puppeteer/issues/303#issuecomment-322919968

解決策は、要素からhref値を抽出して返すことです。

 await this.page.evaluate((sel) => {
        let elements = Array.from(document.querySelectorAll(sel));
        let links = elements.map(element => {
            return element.href
        })
        return links;
    }, sel);
21