Raspberry pi zero wでウェブサイトのスクショを取るその2(phantomjs+selenium+python)
一つ前の記事で、firefoxめっちゃ重くて駄目だったのでphantomjsを使う場合の話。
ページの大きさにもよるけど、なつかしさあふれるphantomjsはさすがに速い。軽いページなら10秒以下でうごく。
このブログも(表示はモバイル用?になってしまうけど)頑張れば一応レンダリング完了できる。
phantomjsをいれる
$ apt install phantomjs
トラブルシュート
本来上でphantomjsがはいると思うんだけれど、うまくうごかなかった。
$ /usr/bin/phantomjs --version $ echo $? 1
バージョンがでてこないし、ステータスコードは0じゃないし、seleniumからも操作できないし※、なんかおかしいので以下から野良blobをDLしていれました。みなさんはちゃんとやろう。
$ wget https://github.com/aeberhardo/phantomjs-linux-armv6l/archive/master.zip $ unzip master.zip $ cd phantomjs-linux-armv6l-master/ $ tar xvjf phantomjs-1.9.0-linux-armv6l.tar.bz2 $ cd phantomjs-1.9.0-linux-armv6l/bin $ sudo cp phantomjs /usr/local/bin/phantomjs $ phantomjs --version 1.9.0 $ which phantomjs /usr/local/bin/phantomjs
※ selenium.common.exceptions.WebDriverException: Message: Service /usr/bin/phantomjs unexpectedly exited.
PythonにseleniumのLibをいれる
$ python -m pip install selenium
コードを書く
pjs_ss.py
#!python from selenium import webdriver driver = webdriver.PhantomJS(executable_path='/usr/local/bin/phantomjs', service_args=['--ignore-ssl-errors=true', '--ssl-protocol=any']) driver.get("http://www.yahoo.co.jp/") driver.save_screenshot("test.png") driver.quit() print("done")
※ めっちゃSSLエラー無視する指定してますが、皆さんはちゃんとしてください。
実行
$ python3.6 pjs_ss.py /usr/local/lib/python3.6/site-packages/selenium/webdriver/phantomjs/webdriver.py:49: UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless ' done $
test.pngが保存されていれば成功。
実行時にめっちゃWARNいわれますけど、そうはいうてもARMv6のRaspi zero向けにheadlessをサポートするバージョンのchromiumがないし(ビルドがどう考えても大変)、firefoxはめっちゃ遅かったんや…。
ただ、phantomjsはどうしてもWeb 1.0風のなつかしさあふれるページになりますね。(個人的にはこれで十分なのだが、UA設定したりすればもうちょっとマシになるのかね?)
まとめ
しょぼいサイトならphantomjsでなんとかなりそう、ただまあRaspberry pi zero w みたいな非力な環境でがんばるより、スクショを取れる公開Web APIを使ったほうが良い。
完全にラズパイ素人なので甘く見ていたのだけれど、ARMv6(Pi0とか)とARMv8(Pi 3Bとか)の溝はかなり深くて広い…、そしてARMv6はサポートしないよってかいてあるOSS多すぎウケるww。かといってPi 3B電気食い過ぎでしょ…。
こちらからは以上です。
余談
最近のchromium-browserのARMバイナリを配布しているところをみつけておとしてみたけど、Illegal instruction
で動かず。
Packages in “Chromium dev” : Chromium dev : “Chromium team” team
$ readelf -a /usr/lib/chromium-browser/chromium-browser > txt $ less txt 〜〜かなり後ろ〜〜 File Attributes Tag_CPU_name: "7-A" Tag_CPU_arch: v7
ウーン、v7以降ね…。
なおfirefox
File Attributes Tag_CPU_name: "6" Tag_CPU_arch: v6
勿論動いた。
まあ、chromiumをがんばってビルドする記事は結構みつかるんだけど、ARMとかいてあるけどそれv7の話だよね???というエントリしかみつからなかった。ARMv6でv59以降のchromiumをビルドするすべを募集中です…。
*1:phantomjs のバージョンの問題かもしれないとおもったけど、--versionうごかないのはさすがに??