node.js - 在抓取Youtube播放列表时,Puppeteer的定义不确定

标签 node.js youtube puppeteer

我正在使用Puppeteer从YouTube播放列表中抓取数据,但无法获取任何数据。
我已经在浏览器中尝试过代码,并使用查询选择器,但想自动化此过程并生成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

最佳答案

根据文档,各种eval函数只能传输可序列化的数据(大致来说,JSON可以处理数据,并带有一些附加功能)。您的代码返回一个不可序列化的DOM元素数组(它们具有方法和循环引用)。尝试在浏览器上下文中检索数据,并仅返回可序列化的数据。例如:

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

关于node.js - 在抓取Youtube播放列表时,Puppeteer的定义不确定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62000611/

相关文章:

javascript - div 被 youtube 嵌入覆盖,我该如何解决?

dart - puppeteer 说异常:找不到Websocket网址

javascript - 如何调试 Node.js 应用程序?

javascript - 在 Node.js 中处理下一个事件

php - 使用php的YouTube API搜索不起作用

javascript - Puppeteer $.eval 选择嵌套元素

jestjs - 无法使用 jest + puppeteer 获得测试覆盖率

node.js - 我想在 Model.find() 方法的 where() 中添加一个函数,但它给出了正文中包含的拼写错误

javascript - Express 路由器无法工作

python - 等待页面加载使用 Selenium 显式等待python