Webサイトをselenium + Xvfb + sshでpythonから操作する

SeleniumのWebDriverを使って、webページをpythonプログラム内から操作する。

SSH先のサーバでディスプレイがない環境を想定。

1. Seleniumのインストール

公式サイトに従ってSeleniumをインストール。

$ pip3 install -U selenium

 

2. Xvfbのインストール

仮想ディスプレイのXvfbをインストールする。

$ sudo yum install xorg-x11-server-Xvfb
$ sudo yum -y groupinstall "X Window System"
$ sudo yum -y groupinstall "Japanese Support"

~/.bashrcに以下を追記。

export DISPLAY=:1

Xvfbを起動。nohubしなくてもssh終了時に強制終了しない。

$ Xvfb :1 -screen 0 1024x768x24 &

上記Xvfbコマンドでmachine-idなしエラーが発生する場合は下記。

$ su -
# dbus-uuidgen > /var/lib/dbus/machine-id

 

3. サンプル実行

# 日本語環境
fp = webdriver.FirefoxProfile()
fp.set_preference('intl.accept_languages', 'ja-JP, ja')
# ドライバ取得
browser = webdriver.Firefox(firefox_profile=fp)
# javascriptなどの動的ページで要素がない場合5秒待つ。
browser.implicitly_wait(5)
# Yahooを表示してから、天気のページへ。
browser.get('https://yahoo.co.jp/')
browser.find_element_by_xpath('//*[@id="yahooservice"]/ul/li[6]/a').click()
# 画面キャプチャー
browser.save_screenshot(file_name)
# 終了(ブラウザを閉じる)
browser.close()

 

参考