Puppeteerのエラーが出た際の対処法です。
Warningとなっていますが後続の処理は実行されないので対処が必要です。
//エラーメッセージ UnhandledPromiseRejectionWarning: Error: Protocol error (Runtime.evaluate): Target closed.
Protocol error (Runtime.evaluate)のエラーはawaitが漏れている
Runtimeとはブラウザの機能のJavaScriptの実行環境です。
Runtime.evaluateが出た際は画面遷移処理のいづれかの処理でawaitが抜けていないか確認してみてください。
私の場合はpage.click()でawaitが抜けていたためメッセージが発生しました。
//誤 page.click('button[type="submit"]'); //正 await page.click('button[type="submit"]');
awaitがなくても動くケースもあり
awaitがなくても上手く実行されることもあります。
私の環境だとローカルのMacbookProだとawaitが無くても動きますが、さくらVPSにアップロードして実行すると動かなくなりましたのでリソースも影響しているようです。
さくらVPSもしばらくは正常に稼働しており、稀にエラーが発生していたので対処が簡単な割に原因の特定が難しいエラーでした。
実行ログに上記エラーが発生していたらawaitがページ遷移の処理に付いているかの見直しを行ってみてください。
Runtime.evaluate以外のメッセージもあり(Runtime.callFuncitonON)
この記事はRuntime.evaluateの対処法を記載しています。
Runtime.callFuncitonONの場合は別エラーとなりますので、以下を参照してみてください。
実行時のリソース割当量を変更するオプションに変更することでエラーが解消されるようです。
https://github.com/GoogleChrome/puppeteer/issues/1175
Puppeteerの記事はこちら
自作アプリケーション初心者にはさくらVPSが手軽でおすすめ
Node.jsのチュートリアルは動画学習が早く習得できます。私が利用しているのはUdemy です。 Node.jsの勉強法も参照ください。
コメントを残す