【问题标题】:JS Puppeteer wait for page load to complete [duplicate]JS Puppeteer等待页面加载完成[重复]
【发布时间】:2019-03-17 01:10:33
【问题描述】:

看到youtube video using puppeteer 后,我受到启发,开始尝试一下。但我似乎错误地选择了一个网站作为入门项目。

const puppeteer = require('puppeteer')
;(async () => {
  const browser = await puppeteer.launch()
  const page = await browser.newPage()

  await page.goto('http://www.produktresume.dk/AppBuilder/search?page=0')
  page.once('load', () => {
    const drugs = page
      .evaluate(() =>
        [...document.querySelectorAll('div.entity-link')].map(item => item)
      )
      .catch(err => console.log(err))
    console.log(drugs[0])
  })

  await browser.close()
})()

我在 Google 上四处搜索并忘记了我尝试过的不同的东西..

我对我的问题的看法是我没有在正确的时间调用评估 - 当页面加载时。

【问题讨论】:

  • page.evaluate()async(承诺)方法吗?如果是这样,在page.once('load') 事件处理程序的上下文中,这可能是问题的根源
  • page.goto之前添加page.once并在page.evaluate的调用上添加await
  • @MathKimRobin 我已将答案标记为解决方案
  • 是的,我知道,但更多的是为了向未来的读者表明这个问题可能与stackoverflow.com/questions/46160929/… 重复。他们可以在那里获得补充信息

标签: javascript node.js ecmascript-6 puppeteer


【解决方案1】:

绝对不需要使用page.on('load') 来查找页面是否加载。

你可以使用,

  • waitUntil.goto 呼叫选项。
  • waitForSelector 特定选择器的函数。

用法,

await page.goto('http://www.produktresume.dk/AppBuilder/search?page=0', {waitUntil: 'networkidle0'});
await page.waitForSelector("#wrapper"); // Found on the page source code, wait for this to appear
// the rest is just as usual
const drugs = await page
.evaluate(() =>
 [...document.querySelectorAll('div.entity-link')].map(item => item)
)
.catch(err => console.log(err))
console.log(drugs[0])

确保使用await 进行.evaluate 调用。

【讨论】:

    猜你喜欢
    • 2018-10-11
    • 2023-03-14
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    相关资源
    最近更新 更多