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

Phi*_*p M 18 javascript node.js puppeteer

我正在使用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' }
Run Code Online (Sandbox Code Playgroud)

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

那是我的剧本:

await page.goto('url'+tableCell04Val, {waitUntil: 'load'});
Run Code Online (Sandbox Code Playgroud)

Jay*_*uld 26

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

在你的page.goto喜欢中使用它:

await page.goto('url'+tableCell04Val, {waitUntil: 'load', timeout: 0});
Run Code Online (Sandbox Code Playgroud)

您可以在此处看到对Pupeteer进行的PR,其中添加了更改,以及文档和实现它的单元测试.


Jua*_*dez 23

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

一种) page.setDefaultNavigationTimeout(timeoutInMiliseconds)

它会影响与导航相关的功能:

•   page.goBack([options])
•   page.goForward([options])
•   page.goto(url[, options])
•   page.reload([options])
•   page.setContent(html[, options])
•   page.waitForNavigation([options])
Run Code Online (Sandbox Code Playgroud)

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])
Run Code Online (Sandbox Code Playgroud)

注意page.setDefaultNavigationTimeout优先于page.setDefaultTimeout


Hen*_*nry 10

您可以像这样设置超时

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


小智 8

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

await page.setDefaultNavigationTimeout(60000);
Run Code Online (Sandbox Code Playgroud)

例如

const page = await browser.newPage();            
await page.setDefaultNavigationTimeout(60000); //timeout 60 seconds now
Run Code Online (Sandbox Code Playgroud)

传递 0 以禁用超时

await page.setDefaultNavigationTimeout(0); 
Run Code Online (Sandbox Code Playgroud)


小智 6

await page.goto('url'+tableCell04Val, {  waitUntil: 'networkidle2',timeout: 0});
Run Code Online (Sandbox Code Playgroud)

networkidle2 对于进行长轮询或任何其他辅助活动的页面非常方便。

检查https://github.com/puppeteer/puppeteer/issues/1552#issuecomment-350954419