如何设置导航超时?

我在用 node.js 和木偶师获取一些数据。我打开的一些文件相当大... ... 然后我得到一个错误:

错误:

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'});
114467 次浏览

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

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

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

#UPDATE 2019 (still working 2022)

You can also change the page behaviour since V1.0.0:

page.setDefaultNavigationTimeout(0);

The param is the timeout in milliseconds.

References: https://pptr.dev/api/puppeteer.page.setdefaultnavigationtimeout

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

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

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.

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);