Puppeteerでエラーメッセージが出た時の対処法:Protocol error (Runtime.evaluate): Target closed.

注意

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が手軽でおすすめ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


ABOUT US

ケネ
はじめまして、ケネです。

Node.jsの技術情報を書いています。

一人でも多くの方と「自分でもできた」感覚を共有したいので、なるべくわかりやすく、実体験ベースでのブログを心がけています。
技術で自分の世界を広げましょう。

不明点や質問があればお気軽にコメントください。