[Puppeteer]「TimeoutError: Navigation timeout of 30000 ms exceeded」の解決方法

タイトルにはTimeoutError: Navigation timeout of 30000 ms exceededの解決方法と書いてありますが、下記のエラーメッセージが出たときも同じく解決方法の一つになります。原因が一緒ですので。

Protocol error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.
Protocol error (Runtime.callFunctionOn): Target closed.

解決方法

下記のいずれかを状況に合わせて実施してみてください。

DefaultのTimeout時間を伸ばす。

await page.setDefaultTimeout(0);

公式: https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#pagesetdefaulttimeouttimeout

DefaultのNavigationのTimeout時間を伸ばす。

await page.setDefaultNavigationTimeout(0);

公式: https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#pagesetdefaultnavigationtimeouttimeout

各ページのTimeout時間を伸ばす。

await page.goto('https://yongjinkim.com', {
  timeout: 0
});

公式: https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#pagegotourl-options

原因

エラーメッセージにも書かれている通り、timeoutが原因です。PuppeteerはDefaultで30000msが設定されていて、それを超える場合、PageがCloseされます。それによりその後の何かの処理は正常に実行されないのでこのようなエラーメッセージを表示します。