Выбор атрибутов href с Кукольником - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь извлечь несколько urls из этой страницы с помощью Puppeteer.

Однако весь мой скрипт возвращается 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 Ответ

0 голосов
/ 03 мая 2018

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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...