【问题标题】:Puppeteer evaluate functionPuppeteer 评估函数
【发布时间】: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


【解决方案1】:

看来等待 1000 是不够的。

https://try-puppeteer.appspot.com/ 试试你的解决方案,你会看到的。

但是,如果您尝试以下解决方案,您将得到正确的结果

const browser = await puppeteer.launch();

const page = await browser.newPage();
await page.goto('https://www.youtube.com/watch?v=T5GSLc-i5Xo');

await page.waitForSelector('span.view-count');
const views = await page.evaluate(() => document.querySelector('span.view-count').textContent);
console.log('Number of views: ' + views);

await browser.close();

【讨论】:

    【解决方案2】:

    不要使用手动超时来等待页面加载,除非您正在测试页面是否只能在该时间内加载。与selenium 不同,有时除了使用超时您别无选择,puppeteer 您应该始终找到一些可以使用的await 函数,而不是猜测“好的”超时。正如Milan Hlinák 所回答的那样,查看页面 HTML 代码并找出一些您可以等待的 HTML 标记,而不是使用超时。通常,等待您测试所需的 HTML 元素才能正常工作。就你而言,span.view-count,正如 Milan Hlinák 已经回答的那样:

    await page.waitForSelector('span.view-count');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多