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

注意 Node.js

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の場合は別エラーとなりますので、以下を参照してみてください。

実行時のリソース割当量を変更するオプションに変更することでエラーが解消されるようです。

Error: Protocol error (Runtime.callFunctionOn): Target closed. · Issue #1175 · puppeteer/puppeteer
I'm running into this error after 22 intervals. Node.js 8 + Puppeteer on Debian. try { await page.evaluate(async () => ( new Promise((resolve, reject) =&...

Puppeteerの記事はこちら

自作アプリケーション初心者にはさくらVPSが手軽でおすすめ

コメント

タイトルとURLをコピーしました