簡體   English   中英

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

您可以在此處查看對 Pupeteer 所做的 PR,其中添加了更改,以及實現它的文檔和單元測試。

2019 年更新

您還可以更改自 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

在 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: 'load', timeout: 10000}).then(() => {
    console.log('success')
}).catch((res) => {
    console.log('fails', res)
})
await page.goto('url'+tableCell04Val, {  waitUntil: 'networkidle2',timeout: 0});

networkidle2 對於進行長輪詢或任何其他輔助活動的頁面非常方便。

檢查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 方法或 options 參數中的 timeout 屬性。 所有情況下的等待時間都以毫秒為單位指定。

await page.setDefaultNavigationTimeout(60000);

例如

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

傳遞 0 以禁用超時

await page.setDefaultNavigationTimeout(0); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM