javascript - JS Puppeteer 等待页面加载完成

标签 javascript node.js ecmascript-6 puppeteer

看到这个后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()
})()

我用谷歌搜索了一下,却找不到我尝试过的不同东西。

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

最佳答案

完全没有必要使用page.on('load')来判断页面是否已加载。

您可以使用,

  • .goto 调用上的 waitUntil 选项。
  • 特定选择器的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])

确保对 .evaluate 调用使用 await

关于javascript - JS Puppeteer 等待页面加载完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52768750/

相关文章:

javascript - 从prototype.object获取类上下文

javascript - 带有空括号的 Node.js REPL 语法

javascript - 使用 k6 进行 Meteor 应用程序负载测试,等待 body 元素

javascript - ECMAScript 2015,可迭代解构表达式

javascript - 无法加载资源: the server responded with a status of 404 (Not Found) in koa2 & nodejs

javascript - Bootstrap/Foundation 堆叠行/列

javascript - 后台流 Windows 8?

javascript - 如何确保导入模块不存在多个实例

javascript - 为什么我需要 @babel/polyfill,使用 Babel?

javascript - 如何在promise javascript中返回值