CentOS7に移動したらselenium-webdriverがSelenium::WebDriver::Error::WebDriverErrorを吐いた

selenium-webdriver+Firefoxを使ったRubyの運用スクリプトをCentOS6環境からCentOS7に移行してきたところ、以下のようなエラー吐いて動かなくなった。

/path/to/mydir/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/firefox/launcher.rb:90:in `connect_until_stable': unable to obtain stable firefox connection in 60 seconds (127.0.0.1:7055) (Selenium::WebDriver::Error::WebDriverError)

GemのバージョンやFirefoxのバージョン変えてみたり、ネット調べながら色々とやっていたのですが、 結果、Xvfb の起動忘れにより仮想デスクトップが稼働してない状態という凡ミスでした。。。

CentOS7へのXvfb導入

せっかくなのでXvfbのインストールからSystemd化まで書きます。

インストールはyumコマンドだけ。

yum install xorg-x11-server-Xvfb

/etc/systemd 以下に定義ファイルを作成。

:5 の部分はディスプレイ番号示しているので適宜変更。

cat <<EOF > /etc/systemd/system/Xvfb.service
[Unit]
Description=X Virtual Frame Buffer Service
After=network.target

[Service]
ExecStart=/usr/bin/Xvfb :5 -screen 0 1024x768x24

[Install]
WantedBy=multi-user.target
EOF

実行権限を忘れずに設定し、systemdの読み込み、有効化。

chmod +x /etc/systemd/system/Xvfb.service
systemctl daemon-reload
systemctl enable Xvfb.service
systemctl start Xvfb.service

指定したディスプレイ番号をexportすればSeleniumでの処理動くはず。

export DISPLAY=:5

参考URL

Xvfb as a systemd service · GitHub