【发布时间】:2019-05-23 01:55:06
【问题描述】:
我是 pupetteer 的新手,我正在尝试通过一些示例了解它的实际工作原理:
所以基本上我在这个例子中要做的是提取 Youtube 视频的观看次数。我在 Chrome 控制台上写了一个 js 行,可以让我提取这些信息:
document.querySelector('#count > yt-view-count-renderer > span.view-count.style-scope.yt-view-count-renderer').innerText
效果很好。但是,当我对我的 pupetteer 代码执行相同操作时,他无法识别我查询的元素。
const puppeteer = require('puppeteer')
const getData = async () => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto('https://www.youtube.com/watch?v=T5GSLc-i5Xo')
await page.waitFor(1000)
const result = await page.evaluate(() => {
let views = document.querySelector('#count > yt-view-count-renderer > span.view-count.style-scope.yt-view-count-renderer').innerText
return {views}
})
browser.close()
return result
}
getData().then(value => {
console.log(value)
})
我终于使用 ytInitialData 对象做到了。但是我想了解我的第一个代码不起作用的原因。
谢谢
【问题讨论】:
-
好像等待时间不够,要不等到所有请求完成
page.goto( 'https://www.youtube.com/watch?v=T5GSLc-i5Xo', { waitUntil: 'networkidle2', timeout: 0 });,然后删除page.waitFor -
我正在尝试完全理解这个 Puppeteer 代码。不确定它是否相关,但使用
let views = ....的原因是什么?我的意思是为什么let。返回{views}而不仅仅是views的原因是什么?提前致谢!
标签: javascript node.js puppeteer