3 votes

Sélection des attributs de href avec Puppeteer

J'essaie d'extraire quelques urls de ce page avec Puppeteer.

Cependant, tout ce que mon script renvoie est 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();

Cependant, lorsque j'exécute un programme comme celui qui suit, je suis au moins capable d'obtenir le nombre correct de liens que j'essaie d'extraire.

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

    return document.getElementsByClassName(sel).length
}, 'homepage-project-image');

console.log(projects);

Est-ce que j'essaie d'accéder à mon projects HTMLCollection incorrectement ? Qu'est-ce qui m'échappe ? Merci.

3voto

Yaniv Points 820

Puppeteer ne peut pas renvoyer une valeur non sérialisable à partir de evaluate (voir cette question et ce qui suit PR )

Une façon de résoudre ce problème serait :

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

        return document.getElementsByClassName(sel)[0].href;
    }, 'homepage-project-image');

Rappelez-vous que document.getElementsByClassName renvoie à HTMLCollection Donc, si vous voulez itérer sur les résultats, vous avez besoin de quelque chose comme :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X