尝试使用puppeteer抓取网站,但出现超时错误

时间:2020-03-10 18:38:47

标签: node.js

我正在尝试使用nodeJs在Kwik Trip网站上搜索每日交易,但是在尝试对其进行爬网时,始终收到超时错误。不太确定会发生什么。有人知道会发生什么吗?

下面是我的代码,因为它是SPA,所以我试图等待.agendaItemWrap加载后再带回所有HTML。

function getQuickStar(req, res){
    (async () => {
        try {
          const browser = await puppeteer.launch();
          const page = await browser.newPage();
          const navigationPromise = page.waitForNavigation({waitUntil: "domcontentloaded"});
          await page.goto('https://www.kwiktrip.com/savings/daily-deals');
          await navigationPromise;
          await page.waitForSelector('.agendaItemWrap', { timeout: 30000 });

      const body = await page.evaluate(() => {
        return document.querySelector('body').innerHTML;
      }); 
      console.log(body);

      await browser.close();
    } catch (error) {
      console.log(error);
    }
  })();

}

这是我尝试抓取https://www.kwiktrip.com/savings/daily-deals

的网页的链接

1 个答案:

答案 0 :(得分:0)

您所需的选择器似乎位于iframe中,而不位于page.mainframe中。 然后,您需要等待自己的iframe,然后在此特定的iframe上执行waitForSelector。

快速提示:您不需要带有page.waitForNavigation的{​​{1}},因为您可以在选项中设置page.goto条件。默认情况下,它等待页面的onLoad事件。