Node.js puppeteer - 如何设置导航超时?

Node.js puppeteer - How to set navigation timeout?

我正在使用 node.js 和 puppeteer 来获取一些数据。我打开的一些文件非常大......然后我得到一个错误:

错误:

our error { TimeoutError: Navigation Timeout Exceeded: 30000ms exceeded
    at Promise.then (/project/node_modules/puppeteer/lib/NavigatorWatcher.js:74:21)
    at <anonymous> name: 'TimeoutError' }

如何忽略它或设置更高的超时时间?

这是我的脚本:

await page.goto('url'+tableCell04Val, {waitUntil: 'load'});

如果您正在加载繁重的页面,您可以使用 timeout: 0 来禁用超时错误。

在您的 page.goto 中使用它,例如:

await page.goto('url'+tableCell04Val, {waitUntil: 'load', timeout: 0});

You can see the PR made to Pupeteer here which added the change, along with documentation and the unit tests that implement it.

你可以这样设置超时

await page.goto('url'+tableCell04Val, {waitUntil: 'load', timeout: 10000}).then(() => {
    console.log('success')
}).catch((res) => {
    console.log('fails', res)
})

#更新 2019

自 V1.0.0 起,您还可以更改页面行为:

page.setDefaultNavigationTimeout(0); 

参数是以毫秒为单位的超时。

参考资料: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagesetdefaultnavigationtimeouttimeout

https://pptr.dev/#?product=Puppeteer&show=api-pagesetdefaultnavigationtimeouttimeout

在 Puppeteer 中有两种处理超时的方法:

a) page.setDefaultNavigationTimeout(timeoutInMiliseconds)

影响导航相关功能:

•   page.goBack([options])
•   page.goForward([options])
•   page.goto(url[, options])
•   page.reload([options])
•   page.setContent(html[, options])
•   page.waitForNavigation([options])

b) page.setDefaultTimeout(timeoutInMiliseconds)

它影响所有以前的导航功能以及所有等待功能:

•   page.waitFor(selectorOrFunctionOrTimeout[, options[, ...args]])
•   page.waitForFunction(pageFunction[, options[, ...args]])
•   page.waitForRequest(urlOrPredicate[, options])
•   page.waitForResponse(urlOrPredicate[, options])
•   page.waitForSelector(selector[, options])
•   page.waitForXPath(xpath[, options])

注意page.setDefaultNavigationTimeout优先于page.setDefaultTimeout

await page.goto('url'+tableCell04Val, {  waitUntil: 'networkidle2',timeout: 0});

networkidle2 comes handy for pages that do long-polling or any other side activity.

勾选https://github.com/puppeteer/puppeteer/issues/1552#issuecomment-350954419

我遇到了同样的错误,但不是直接使用 node.js 应用程序。我在使用 Ubuntu 服务器上安装的 MagePack 时遇到了这个问题。

我通过增加以下文件中的超时来修复它 /ur/local/lib/node_modules/magepack/node_modules/puppeteer/libTimeoutSettings.js

const DEFAULT_TIMEOUT = 30000

注意:这可能不是完美的解决方案,但它对我有用并解决了我面临的问题。

puppeteer 超时的默认值为 30 秒。要使用自定义超时,您可以使用 setDefaultNavigationTimeout 和 setDefaultTimeout 方法或选项参数中的超时 属性。所有情况下的等待时间都以毫秒为单位指定。

await page.setDefaultNavigationTimeout(60000);

例如

const page = await browser.newPage();            
await page.setDefaultNavigationTimeout(60000); //timeout 60 seconds now

传递 0 以禁用超时

await page.setDefaultNavigationTimeout(0);