为什么伪造者page.goto()抛出超时错误?

时间:2019-08-19 11:50:34

标签: node.js puppeteer serverless

以下代码引发错误,为什么?

  

超过导航超时:超过60000ms

我正在使用puppeteer版本1.19.0

const puppeteer = require("puppeteer");

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

  await page.setCacheEnabled(false);

  try {
    const response = await page.goto("https://www.gatsbyjs.com", {
      waitUntil: "networkidle0",
      timeout: 60000
    });

    console.log("Status code:", response.status());
  } catch (error) {
    console.log(error.message);
  }

  await browser.close();
})();

某些其他URL可以正常工作,所以我想知道此特定URL是否有什么特别之处吗?

2 个答案:

答案 0 :(得分:1)

删除waitUntil: "networkidle0"是可行的,因此我假设该站点仍保持与服务器的连接。

我无法使用开发人员工具(可以通过运行await puppeteer.launch({ headless: false })在非无头模式下访问)确定它是哪个连接(也许是服务工作者?)

答案 1 :(得分:1)

如果更改了waitUntil:“ networkidle2”。没有超时。

  

networkidle2-认为在没有导航时导航完成   至少500毫秒内超过2个网络连接。

正如Erez的回答所指出的。 'serviceworker'可能正在保持连接。您可以转到chrome:// serviceworker-internals /进行检查。或Devtools->“应用程序”标签-服务助手

Serive Worker: chrome://serviceworker-internals/

Scope: https://www.gatsbyjs.com/
Registration ID: 295
Navigation preload enabled: false
Navigation preload header length: 4
Active worker:
Installation Status: ACTIVATED
Running Status: RUNNING
Fetch handler existence: EXISTS
Script: https://www.gatsbyjs.com/sw.js
Version ID: 10330
Renderer process ID: 11892
Renderer thread ID: 18124
DevTools agent route ID: 8

From Network : installingWorker ServiceWorker {scriptURL: "https://www.gatsbyjs.com/sw.js", state: "installing", onerror: null, onstatechange: null}

参考文献:

Navigation Timeout Exceeded when using networkidle0 and no insight into what timed out

Support ServiceWorkers #2634