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});
V1.0.0以降、ページの動作を変更することもできます。
await page.setDefaultNavigationTimeout(0);
Paramはミリ秒単位のタイムアウトです。
参照: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagesetdefaultnavigationtimeouttimeouthttps://pptr.dev/#?product=Puppeteer&version= v1.17.0&show = api-pagesetdefaultnavigationtimeouttimeout
Puppeteerでタイムアウトを処理するには、2つの方法があります。
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