pythonとseleniumでWEBサイトをスクリーンショット

pythonとseleniumで firefoxを仮想バッファ(xvfb)で操作し、WEBサイトのスクリーンショットを取得する方法です。

phantomJSで綺麗に画面のスクリーンショットを取得できない場合は、この方法がおすすめです。php+phantomJSでWEB画面キャプチャを簡単に実装 

pythonインストール

Google Compute EngineのCentOS7では
pythonがデフォルトで入っているので、バージョンを確認
入っていない場合はインストールしてください。

仮想バッファバッファ(xvfb)をインストール

xvfbと、ブラウザ表示が文字化けしないようにフォントを入れます。

 

pipでseleniumとpyvirtualdisplayをインストール

pyvirtualdisplayは、xvfbを操作するライブラリです。

 

geckodriverとfirefoxをインストール

geckodirverとは seleniumからfirefoxを使うためのドライバです。
ここに最新版があります。
https://github.com/mozilla/geckodriver/releases/

 

pythonプログラム

URLを記載したlist.txtを読み、そのURLのWEBキャプチャを取るようなプログラムを書いてみます。

/root/list.txtに 試しにhttp://www.yahoo.co.jp/と書きこみ、以下コマンドを実行してみてください。

 

selenium.common.exceptions.WebDriverException: Message: connection refused

と出る場合は、firefoxのバージョンが古い可能性があります。

 

geckodriver v0.19.0の環境推奨は、

Firefox 55.0 (and greater)
Selenium 3.5 (and greater)

なので、firefoxをバージョンUPします。
(centos7で通常yumでいれると、現在はfirefox 52.4.0でした)
[root@test-server ~]# firefox -V
Mozilla Firefox 52.4.0

これでfirefoxのバー上アップが完了です。

以下のようなエラー

XPCOMGlueLoad error for file /opt/firefox/libmozgtk.so:
libgtk-3.so.0: cannot open shared object file: No such file or directory
Couldn’t load XPCOM.

と出る場合は、gtk3をいれます。

 

もう一度以下コマンドを打ち、スクリーンショットができていたら成功です

[root@test-server ~]$ python screenshot.py


この記事をシェア