我正在使用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'});
const records = await page.evaluate( () =>
{
const page = document.createElement( 'html' );
const page_content = document.body.textContent;
page.innerHTML = page_content;
return {
'valueA' : Array.from( page.getElementsByTagName( 'valueA' ), e => e.textContent ),
'valueB' : Array.from( page.getElementsByTagName( 'valueB' ), e => e.textContent ),
'valueC' : Array.from( page.getElementsByTagName( 'valueC' ), e => e.textContent ),
'valueD' : Array.from( page.getElementsByTagName( 'valueD' ), e => e.textContent )
};
});
答案 0 :(得分:11)
如果要加载大量页面,可以使用timeout: 0
来禁用超时错误。
在您的page.goto
中使用它,例如:
await page.goto('url'+tableCell04Val, {waitUntil: 'load', timeout: 0});
答案 1 :(得分:3)
await page.goto('url'+tableCell04Val, { waitUntil: 'networkidle2',timeout: 0});
networkidle2对于进行长轮询或其他任何附带活动的页面非常有用。
选中https://github.com/puppeteer/puppeteer/issues/1552#issuecomment-350954419
答案 2 :(得分:2)
您可以这样设置超时时间
await page.goto('url'+tableCell04Val, {waitUntil: 'load', timeout: 10000}).then(() => {
console.log('success')
}).catch((res) => {
console.log('fails', res)
})
答案 3 :(得分:2)
您也可以从V1.0.0开始更改页面行为:
await page.setDefaultNavigationTimeout(0);
参数是超时(以毫秒为单位)。
参考: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagesetdefaultnavigationtimeouttimeout https://pptr.dev/#?product=Puppeteer&version=v1.17.0&show=api-pagesetdefaultnavigationtimeouttimeout
答案 4 :(得分:2)
在Puppeteer中有两种方法来处理超时:
a) page.setDefaultNavigationTimeout(timeoutInMiliseconds)
它会影响与Navegation相关的功能:
• 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
答案 5 :(得分:1)
我遇到了同样的错误,但没有直接使用 node.js 应用程序。我在使用安装在 Ubuntu 服务器上的 MagePack 时遇到了这个问题。
我通过增加以下文件中的超时时间来修复它/ur/local/lib/node_modules/magepack/node_modules/puppeteer/libTimeoutSettings.js
const DEFAULT_TIMEOUT = 30000
答案 6 :(得分:0)
puppeteer 超时的默认值为 30 秒。要使用自定义超时,您可以使用 setDefaultNavigationTimeout 和 setDefaultTimeout 方法或 options 参数中的 timeout 属性。所有情况下的等待时间都以毫秒为单位指定。
await page.setDefaultNavigationTimeout(60000);
例如
const page = await browser.newPage();
await page.setDefaultNavigationTimeout(60000); //timeout 60 seconds now
传递 0 以禁用超时
await page.setDefaultNavigationTimeout(0);