[Selenium]スクリーンショット画像取得方法一例

  • 5
    いいね
  • 1
    コメント

はじめに

Selenium を利用してWebページのスクリーンショット画像を取得する方法の一例です

前提など

  • Vagrant インストール済み(1.7.4)
  • VirtualBox インストール済み(5.0.10)
  • Windows 8.1 Pro 上で行った

セットアップ

Vagrant 用 box の選定

  • http://www.vagrantbox.es/ から ホスト環境に合った Ubuntu の box を決めて以下のようなコマンドを実行
 $ vagrant box add {title} {url}
 $ vagrant init {title}

仮想環境起動

  • Vagrantfile を調整後、以下を実行
 $ vagrant up

必要なライブラリ等のインストール

# vi /etc/hostname    //→ 自分の好きなホスト名に

# (ホストOS側でダウンロードした jdk-8u65-linux-x64.tar.gz をゲスト側に転送し /tmp/ に置いた)

# cd /tmp
# tar xvfz jdk-8u65-linux-x64.tar.gz
# mv jdk1.8.0_65 /opt/
# cd /usr/local/bin
# sudo ln -s /opt/jdk1.8.0_65/bin/java java   //→ /usr/local/bin/java
# java -version     //→ java インストール確認
# cd /tmp
# sudo aptitude install xvfb xserver-xephyr firefox firefox-locale-ja fonts-ipaexfont-gothic fonts-ipafont-gothic
# wget http://peak.telecommunity.com/dist/ez_setup.py  (Python 2.7.6 が入ってるのを確認したうえで: python -V )
# sudo python ez_setup.py
# sudo easy_install pip
# pip --version
# sudo pip install pyvirtualdisplay
# sudo pip install selenium
# wget http://selenium.googlecode.com/files/selenium-server-standalone-2.22.0.jar
# mv selenium-server-standalone-2.22.0.jar /opt/   //→ /opt/selenium-server-standalone-2.22.0.jar

Firefox 47 以降では動作しないので、 Firefox 46 のバイナリを取得

# cd /opt
# wget https://ftp.mozilla.org/pub/firefox/releases/46.0.1/linux-x86_64/ja/firefox-46.0.1.tar.bz2
# tar jxf firefox-46.0.1.tar.bz2

-> /opt/firefox/firefox が Firefox 46 のバイナリ

Screenshot 取得

[未起動だったら] Selenium Server をバックグラウンドで起動

sudo su -
ps -ef | grep selenium
(java のプロセス :  seleniumのjar呼び出し  がなければ未起動)
nohup java -jar /opt/selenium-server-standalone-2.22.0.jar &

スクリプト実行 (Python インタプリタ)

python

>>> from pyvirtualdisplay import Display
>>> from selenium import webdriver
>>> from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
>>> 
>>> display = Display(visible=0, size=(800, 600))
>>> display.start()
<Display cmd_param=['Xvfb', '-br', '-screen', '0', '800x600x24', ':1125'] alias={alias} cmd=['Xvfb', '-br', '-screen', '0', '800x600x24', ':1125'] ({scmd}) oserror=None returncode=None stdout="None" stderr="None" timeout=False>
>>> 
>>> binary = FirefoxBinary('/opt/firefox/firefox')
>>> browser = webdriver.Firefox(firefox_binary=binary)
>>> browser.get('https://www.ann-kate.jp/')
>>> browser.save_screenshot('ann-kate.png')
True
>>> browser.quit()
>>> display.stop()

備考

少し応用すれば複数サイトの画面状況確認をコマンド一発とかボタン一発でできるようになるはず

refs: