Node.jsで暗号資産アービトラージ

ビットコイントレード中心にNode.jsで実際に作るためのレシピ

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の記事はこちら
www.kennejs.com

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