Node.js puppeteer - How to set navigation timeout?
Javascriptnode.jsPuppeteerJavascript Problem Overview
I'm using node.js and puppeteer to get some data. Some of the files I'm opening are quite large ... and then I get an error:
Error:
our error { TimeoutError: Navigation Timeout Exceeded: 30000ms exceeded
at Promise.then (/project/node_modules/puppeteer/lib/NavigatorWatcher.js:74:21)
at <anonymous> name: 'TimeoutError' }
How can I ignore it or set a higher timeout?
That's my script:
await page.goto('url'+tableCell04Val, {waitUntil: 'load'});
Javascript Solutions
Solution 1 - Javascript
You can use timeout: 0
to disable timeout errors if you're loading a heavy page.
Use it in your page.goto
like:
await page.goto('url'+tableCell04Val, {waitUntil: 'load', timeout: 0});
Solution 2 - Javascript
#UPDATE 2019
You can also change the page behaviour since V1.0.0:
page.setDefaultNavigationTimeout(0);
The param is the timeout in milliseconds.
References: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagesetdefaultnavigationtimeouttimeout
https://pptr.dev/#?product=Puppeteer&show=api-pagesetdefaultnavigationtimeouttimeout
Solution 3 - Javascript
There are two methods to handle the timeouts in Puppeteer:
a) page.setDefaultNavigationTimeout(timeoutInMiliseconds)
It affects the navigation-related functions:
• page.goBack([options])
• page.goForward([options])
• page.goto(url[, options])
• page.reload([options])
• page.setContent(html[, options])
• page.waitForNavigation([options])
b) page.setDefaultTimeout(timeoutInMiliseconds)
It affects all the previous navigation functions plus all the Waiting funtions:
• 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])
NOTE: page.setDefaultNavigationTimeout
takes priority over page.setDefaultTimeout
Solution 4 - Javascript
You can set timeout like this
await page.goto('url'+tableCell04Val, {waitUntil: 'load', timeout: 10000}).then(() => {
console.log('success')
}).catch((res) => {
console.log('fails', res)
})
Solution 5 - Javascript
await page.goto('url'+tableCell04Val, { waitUntil: 'networkidle2',timeout: 0});
> networkidle2 comes handy for pages that do long-polling or any other side activity.
Check https://github.com/puppeteer/puppeteer/issues/1552#issuecomment-350954419
Solution 6 - Javascript
The default in puppeteer timeout is 30 seconds. To use custom timeouts, you can use the setDefaultNavigationTimeout and setDefaultTimeout methods or the timeout property in the options parameter. The wait time in all cases is specified in milliseconds.
await page.setDefaultNavigationTimeout(60000);
e.g.
const page = await browser.newPage();
await page.setDefaultNavigationTimeout(60000); //timeout 60 seconds now
Pass 0 to disable the timeout
await page.setDefaultNavigationTimeout(0);
Solution 7 - Javascript
I got same error but not on directly using node.js application. I faced this issue when I was using MagePack installed on the Ubuntu server.
I fixed it by increasing the timeout in the following file /ur/local/lib/node_modules/magepack/node_modules/puppeteer/libTimeoutSettings.js
const DEFAULT_TIMEOUT = 30000
Note: It may not be perfect solution but it worked for me and fixed the issue which I was facing.