読者です 読者をやめる 読者になる 読者になる

歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【Python】Selenium + PhantomJSでPythonからブラウザ画面のスクリーンショットを撮る

WEBサイトの改修を検知するプログラムがそれなりにうまくいきそうなのですが、改修があったときにyamlの文字列を見てもピンと来ません。

kiito.hatenablog.com

というわけで、PythonからSeleniumを介してPhantomJSを動作させ、 スクリーンショットを撮ることにしました。

PhantomJS でログインが必要なページでも自由自在にスクレイピング - 凹みTips

PhantomJS はヘッドレスな(ブラウザ画面のない)QtWebKit ベースのブラウザで、JavaScriptAPI を通じて、そのブラウザを自由自在にあやつることが出来ます。使用シーンとしては、Jenkins などの CI ツールとの組み合わせによる Web ページの GUI の自動テストや、Web ページのスクリーンキャプチャ、スクレイピングなどが挙げられます。

実行環境

botとかクローラー動かすのに使っているさくらVPSで試してみました。

$ cat /etc/redhat-release
CentOS release 6.8 (Final)
$ arch
x86_64

node.jsのインストール

qiita.com

sudo yum install epel-release
sudo yum install nodejs npm --enablerepo=epel
# sudo yum install gcc gcc-c++ # 元々インストールしていたので入れなかった

PhantomJSのインストール

npm -g install phantomjs

Pythonselenium webdriverをインストールする

元々pvenvを使って、Python3.5(Anaconda2.5)を入れていたのでインストール手順は端折ります。

$ python -V
Python 3.5.1 :: Anaconda 2.5.0 (64-bit)

Seleniumをインストールします。

# ユーザー権限のpyenv環境上なのでsudoいらない
pip install selenium

Pythonのコードの実行

stackoverflowの記事を参考に、 スクリーンショットを撮るプログラムを書きました。

from selenium import webdriver

driver = webdriver.PhantomJS() # パスは特に指定する必要はありませんでした
driver.set_window_size(1024, 768)
driver.get('https://google.com/')
driver.save_screenshot('screen.png')
driver.close()

以下のファイルが保存できました。これは問題なく使えそうですね。

f:id:takeshi0406:20160929233829p:plain