2020年1月12日日曜日

phantomjsからchromiumのheadlessモードへ引っ越す

今まで、livedoorブログやfc2ブログなどの定期監視にphantomjsを使っていました。
 本来ならwgetが使えればよいのですが、最近のブログサービスはjavascriptバリバリで、javascriptを解さないUAでは意味のあるHTMLソースを取得できません。
そんな中、FreeBSDのjail環境上で比較的軽量に動くphantomjsは大変重宝していました。

phantomjsはすでにプロジェクトが終了しているので、そのうち代替のソリューションに乗り換えなければ、とは思っていました。
そうこうしているうちに、phantomjsがFreeBSDのportsから削除されました、容赦なく。
メンテナンスのために、pkg update/upgradeしたら削除されてしまいました、マジか。

phantomjsが打ち切られた理由の一つに、chromeにheadlessモードが追加されたことがあるようです。
chromeは、FreeBSD向けにはビルド済みバイナリは提供されていませんが、chromeのコミュニティ版であるchromiumならばpkg形式で提供されています。

ということで、chromiumのheadless機能を使ってphantomjsの代替にしたいと思います。

google検索をかけると、seleniumやWebDriverに関して書かれた記事がたくさん引っかかるのですが、私が欲しいのは「javascriptを解するwget」ですので、chromiumだけでjavascript実行後のHTMLソースを取得してみたいと思います。

まずはchromiumの導入から。
pkg install chromium
これでchromiumがインストールされます。
インストールに伴い、chromium以外にも依存関係のあるライブラリ群も導入されます。
まっさらなjail環境にインストールすると、ライブラリ等含め、1GB程度のディスクスペースが必要なようです。

インストールが済んだら、以下のようにしてheadlessモードで動作するか確認します。
chrome --headless --disable-gpu --dump-dom https://www.kishiro.com/ > ./result.html
これでchromiumが持つDOMのデータをHTML形式で取得できます。

Xの設定とか色々いるのかと思いきや、普通にコマンドラインで動きますね。
確かにphantomjsの開発意義が失われてしまう感じかも。

なお、chromeはブラウザを終了させてもプロセスが残ることがあり、上記のようなコマンドをシェルスクリプトで連続して呼び出した場合、残ったプロセスによりchromeがうまく起動しない場合があります。
この場合には「--disable-background-mode」 を指定するとよいです。

ということで、chromiumのheadlessモードでphantomjsの代替はできそうです、よかった。

最後に、phantomjsの作者さん、今までどうもありがとう!

0 件のコメント:

コメントを投稿