我正在使用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
来自同一个浏览器的截图
最佳答案
根据文档,各种eval函数只能传输可序列化的数据(大致来说,JSON可以处理数据,并带有一些附加功能)。您的代码返回一个不可序列化的DOM元素数组(它们具有方法和循环引用)。尝试在浏览器上下文中检索数据,并仅返回可序列化的数据。例如:
return rows.map(row => [row.innerText, row.href]);
关于node.js - 在抓取Youtube播放列表时,Puppeteer的定义不确定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62000611/