web-dev-qa-db-fra.com

puppeteer page.evaluate querySelectorAll retourner des objets vides

J'essaie marionnettiste, voici un exemple de code sur lequel vous pouvez l'exécuter https://try-puppeteer.appspot.com/

le problème est que ce code retourne un tableau d'objets vides

[{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, { }, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {} , {}, {}, {}, {}, {}, {}, {}]

Suis-je en train de faire une erreur?

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
Abdullah Alsigar

Les valeurs renvoyées par la fonction d'évaluation doivent être json sérialisables. https://github.com/GoogleChrome/puppeteer/issues/303#issuecomment-322919968

la solution est d'extraire les valeurs href des éléments et de les renvoyer.

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