我正在用 puppeteer 编写一个程序,它使用以下代码从 youtube 播放列表中获取歌曲标题和艺术家姓名:await page.goto(url);let songs = await page.evaluate(() => { let results = []; let songTitle, songArtist; let elements = document.querySelectorAll('#meta'); elements.forEach(el => { songTitle = el.querySelector('h4'); songArtist = el.querySelector('#byline'); if (songTitle) { results.push({ title: songTitle.textContent, artist: songArtist.textContent }); } }); return results;});songs.forEach(song => { song.title = song.title.trim(); song.artist = song.artist.trim();});songs.sort((a,b) => a.artist > b.artist ? 1 : -1);console.table(songs);变量 url 是指向包含 8 首歌曲的 youtube 播放列表的链接。我以前用那个播放列表和其他播放列表运行过这个程序,它运行良好。然而,过去几天它一直在返回一个空白表,即使我没有修改这段代码。我在与 spotify 网络播放器一起使用的末尾添加了更多代码,但这不应该影响我已经编写的代码,并且其中一些代码在 YouTube 部分停止工作之前已经存在。是我写的代码有问题,还是我wifi的问题?编辑:我尝试在注释掉 Spotify 部分的情况下运行代码,但它仍然无法正常工作。
1 回答
幕布斯7119047
TA贡献1794条经验 获得超8个赞
网络连接的质量是一个很好的猜测。
在开始抓取之前,您需要等待 DOM 中加载的元素。如果您的网络速度极快:您就会成功,否则它不会收集到您想要的内容。您可以使用page.waitForSelector
以确保可以开始抓取。
await page.goto(url);
await page.waitForSelector('#meta');
let songs = await page.evaluate(() => {
...
添加回答
举报
0/150
提交
取消