puppeteerでpage.click
を実行して画面遷移後にpage.evalute
等を実行するとUnhandledPromiseRejectionWarning: Error: Execution context was destroyed, most likely because of a navigation.
のような例外が起こる場合がある。
これはpage.click
をawaitしてもページ遷移までは待っていないため、ページ遷移前に遷移前ページの要素にアクセスしてその最中にページ遷移が起こりアクセス中の要素が破壊されてしまい例外となっている。
そのため、page.click
をawaitするだけでなく、ページ遷移イベントもawaitしなければならない。
await Promise.all([
page.waitForNavigation({waitUntil: ['load', 'networkidle2']}),
page.click('a.user-name')
]);