首页 > 解决方案 > JS Puppeteer 等待页面加载完成

问题描述

在看到这个使用 puppeteer 的 youtube 视频后,我受到启发,开始尝试使用它。但我似乎错误地选择了一个网站作为入门项目。

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()
})()

我用谷歌搜索并忘记了我尝试过的不同的东西..

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

标签: javascriptnode.jsecmascript-6puppeteer

解决方案


绝对不需要使用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通话。


推荐阅读