получил undefined с Puppeteer при удалении плейлиста Youtube - PullRequest
0 голосов
/ 25 мая 2020

Я использую Puppeteer для удаления данных из плейлиста YouTube, но не могу получить никаких данных. Я пробовал код в браузере и использую Query Selector, но хочу автоматизировать этот процесс и сгенерировать файл json в качестве вывода этого процесса.

код


const puppeteer = require('puppeteer');


(async () => {
    console.log("begin");
    const browser = await puppeteer.launch({headless : false });
    const page = await browser.newPage();
    console.log("after newPage");
    await page.goto('https://www.youtube.com/playlist?list=PL2-FkZlJhxqVXZO1c6gKgsAdiet0zcOAO');

    console.log("after goto ");

    const selectorA = "a.yt-simple-endpoint.ytd-playlist-video-renderer"
    await page.waitForSelector(selectorA);
    console.log("after waitForSelector ");

    const items = await page.$$eval(selectorA, rows => {
        console.log("eval " + rows);
         return rows;    
    });

    console.log("items " + items);


    await browser.close();
})();



результаты


begin
after newPage
after goto 
after waitForSelector 
items undefined

Скриншот из того же селектора с браузером enter image description here

enter image description here

1 Ответ

1 голос
/ 25 мая 2020

Согласно документации, различные функции eval могут передавать только сериализуемые данные (грубо говоря, данные JSON могут обрабатывать с некоторыми дополнениями). Ваш код возвращает массив элементов DOM, которые не сериализуемы (у них есть методы и циклические ссылки). Попробуйте получить данные в контексте браузера и вернуть только сериализуемые данные. Например:

return rows.map(row => [row.innerText, row.href]);
...