[Puppeteer]ERROR: Execution context was destroyed, most likely because of a navigation. 解決方法

Puppeteerで「ERROR: Execution context was destroyed, most likely because of a navigation.」が出る時の解決方法。

原因

エラーメッセージにも書かれているように、主にnavigationが終わっていない時に操作を行おうとするとこのエラーが出る。

解決方法

page.waitForNavigationを使い、きちんとnavigationが終わるのを待つ。
例えば、クリックによりnavigationが生じる処理があるなら、下記のようにしてnavigationが終わるのを待つ。

const [response] = await Promise.all([
  page.waitForNavigation(waitOptions),
  page.click(selector, clickOptions),
]);

参考公式文書: https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#pageclickselector-options

Bear in mind that if click() triggers a navigation event and there's a separate page.waitForNavigation() promise to be resolved, you may end up with a race condition that yields unexpected results. The correct pattern for click and wait for navigation is the following: