新着情報を確認する際、ブラウザでサイトにアクセスし、アイコンをクリックすると自分へのお得な情報が提供されるようなサイトありますよね。
毎日確認したいところですが、忘れがちなので、node+puppeteerで自動化し、変化を検知して確認するようにしていました。
node+puppeteerをやめたわけ、動かなくなるから
この機能はmacOSで動作させていました。かなり長い間正常動作していたのですが、いつの間にか止まっていたことに最近気がつきました。
/System/Volumes/Data/path-to-app/cron/node_modules/puppeteer/lib/cjs/puppeteer/common/Connection.js:230
error: new Errors_js_1.ProtocolError(),
^
ProtocolError: Protocol error (Target.setAutoAttach): Target closed.
at /System/Volumes/Data/path-to-app/cron/node_modules/puppeteer/lib/cjs/puppeteer/common/Connection.js:230:24
at new Promise (<anonymous>)
at CDPSession.send (/System/Volumes/Data/path-to-app/cron/node_modules/puppeteer/lib/cjs/puppeteer/common/Connection.js:226:
16)
at Page._initialize (/System/Volumes/Data/path-to-app/cron/node_modules/puppeteer/lib/cjs/puppeteer/common/Page.js:177:26)
at Page.create (/System/Volumes/Data/path-to-app/cron/node_modules/puppeteer/lib/cjs/puppeteer/common/Page.js:169:20)
at /System/Volumes/Data/path-to-app/cron/node_modules/puppeteer/lib/cjs/puppeteer/common/Target.js:73:88
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Browser._createPageInContext (/System/Volumes/Data/path-to-app/cron/node_modules/puppeteer/lib/cjs/puppeteer/common
/Browser.js:286:22)
at async doAsync (/System/Volumes/Data/path-to-app/cron/main.js:32:18) {
originalMessage: ''
}
何が変わったんでしょうか?macOSはアップグレードし、いつも最新にしています。これが影響し、puppeteerで動作させるchromeが動作しなくなったのでしょうか?それとも別の要因でしょうか?
node_moduleをクリアし、最新のpuppeteerをインストールしなおしました。
/System/Volumes/Data/path-to-app/cron/main.js:31
const iphone = puppeteer.devices['iPad Mini landscape'];
^
TypeError: Cannot read properties of undefined (reading 'iPad Mini landscape')
at doAsync (/System/Volumes/Data/path-to-app/cron/main.js:31:37)
バージョンアップにより、puppeteerの使い方が変わったようです。動作実績のあるソースでエラーが発生するようになりました。
=>外部要因で動作実績のあるアプリが動作しなくなる
node+puppeteerをやめたわけ、メンテナンスが大変だから
node_modulesは自分で構成したわけではありませんでした。puppeteerをインストールした際、ごっそり100件以上の関連モジュールがインストールされていました。
puppeteerのインストールに関連するものと、わかっていたのでnode_modulesをごっそり削除という方法が取れました。
自分で構成していたとすると、何をアップデートするべきか、最新版は今どうなっているのか、など調査し、再構成する必要が出ててきます。
実現していることに対する、メンテナンスのコストを考えると、
node使わなくていいんじゃない?って気になってきました。
いつかnode+npm自体のアップデートも必要ですしね・・・
まとめ:これからはchrome拡張機能で
当時ヘッドレスブラウザーは高機能でとても魅力的でした。色々な機能を実現することに役立つことがわかっています。オープンソース系のライブラリ群は高頻度でメンテナンスされているものもあります。
常に最新を追いかけていくことは難しいですよね。ただ、更新をサボると、今回のように浦島太郎状態になってしまうこともあります。
あまり、手をかけず、維持していきたいので変化に強い仕組みを導入していこうと思っています。
chrome拡張機能を自作することで似たような仕組みは構築可能です。
以前のデータと、今回のデータ、これを比較することで変化を検知しています。この辺りはlocalWeb上のアプリで実現する予定です。
取り込んだデータをどうやって受け渡すの?backgroundサービスを利用することでドメインを超えてデータのやり取りが可能です。
コメント