前回の記事でXvfbを使って仮想ディスプレイの画面をキャプチャする方法を紹介しましたが,
いろいろ手間だったので,今回はxvfbwrapper + selenium を使ってpythonから一発でキャプチャする方法を紹介します.

環境

- Ubuntu14.04
- python 2.7.10
- 2015/06/18時点で最新版のFirefox

下準備

まず必要ライブラリ等をインストールします(Xvfbをインストールしていることが前提.前回を参照).

pip install xvfbwrapper
pip install selenium

xvfbwrapperはその名の通り,XvfbのpythonWrapper, seleniumは自動テストを行ったり,Webサイトを操作して何かを取得したりしたい時に便利です.
詳しくはこちら

日本語フォントのインストール

入れないとスクリーンショットが文字化けします.

$ wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add -
$ wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | $ sudo apt-key add -
$ sudo wget https://www.ubuntulinux.jp/sources.list.d/quantal.list -O /etc/apt/sources.list.d/ubuntu-ja.list
$ sudo apt-get update
$ sudo apt-get install ubuntu-defaults-ja

キャプチャ

下準備が済んだので実際にキャプチャしてみましょう.

from selenium import webdriver
from xvfbwrapper import Xvfb


class CapturePages(object):

    def __init__(self, _width, _height):

        # adapting to japanease 
        fp = webdriver.FirefoxProfile()
        fp.set_preference('intl.accept_languages', 'ja-JP, ja')
        self.xvfb = Xvfb(width=_width, height=_height)
        self.xvfb.start()
        # getting webdriver
        self.browser = webdriver.Firefox(firefox_profile=fp)


    def capPage(self, page, file_name):
        # waiting 2 sec
        self.browser.implicitly_wait(2)
        # going to webpage
        self.browser.get(page)
        # screen capture
        self.browser.save_screenshot(file_name)
        # closing web browser
        self.browser.close()

    def endCapture(self):
        self.xvfb.stop()
        self.browser.quit()

if __name__ == '__main__':
    capture = CapturePages(1280, 720)
    capture.capPage("https://www.google.co.jp", "sample.png")
    capture.endCapture()

sample.pngにgoogleのトップページが保存されているはずです.


参考サイト:

- xvfbwrapper(https://github.com/cgoldberg/xvfbwrapper)
- Webサイトをselenium + Xvfb + sshでpythonから操作する(https://abeerforyou.com/?p=702)
- Ubuntu12.04 + Selenium の環境作成(http://qiita.com/u_s_k/items/8b96ee2cc29e333b9cae)
- python で Web サイトをクローリングする(http://qiita.com/hideshis/items/1c113d21321d6d580bce)

Share Button

xvfbwrapper + selenium でpythonからweb画面キャプチャ

<2015/06/18>