Selenium Gridの構築
Seleniumが公式でメンテナンスしているDockerイメージはこちらにあります。たくさんのイメージがありますが、Selenium Gridの構築に必要なものにしぼって実際の構築方法を説明していきます。
ハブの起動
selenium/hubが、Selenium Gridのハブ用のイメージになります。本記事では、2017年10月時点での最新版である3.6.0-bromineを利用します。
ちなみに、SeleniumのDockerイメージは利用されているSelenium WebDriverのバージョン+ABC順の元素の名前でバージョン付がされています。例えば、WebDriverにアップデートがないまま、Chrome Driverがリリースされた場合や、Dockerイメージ自体の改善があった場合は、元素の名前が更新されていきます。
以下のコマンドで起動すると、4444ポートでハブが立ち上がります。
$ docker pull selenium/hub:3.6.0-bromine $ docker run --rm -d -p 4444:4444 --name selenium-hub selenium/hub:3.6.0-bromine
http://localhost:4444/grid/consoleにアクセスすると、以下のようなハブのコンソール画面が表示されていることがわかります。
ノードの起動
Selenium Gridのノード用のイメージにはnode-の接頭辞がつきます。公式ではGoogle ChromeとFirefoxとPhantomJSのブラウザ用Dockerイメージがメンテナンスされています。
本記事では、selenium/node-chromeを利用した例を説明しますが、例えばselenium/node-firefoxでも同様の手順になりますので、適宜読み替えてください。
$ docker pull selenium/node-chrome:3.6.0-bromine $ docker run --rm -d --link selenium-hub:hub selenium/node-chrome:3.6.0-bromine
既に起動してあるselenium-hubにlinkしてnode-chromeコンテナを起動します。すると、ノードがハブに接続していることがSelenium Gridのコンソール画面からも確認できます。
これで、http://localhost:4444/wd/hubにWebDriverクライアントを接続すると、Google Chromeを利用したブラウザ自動操作ができます。
また、ブラウザはコンテナ内で起動するため、例えば自分のPCでSeleniumを使ったブラウザ自動操作スクリプトを実行したときのように、起動したブラウザに画面のフォーカスをとられ作業効率が落ちてしまうというようなことが発生しなくなります。
Dockerを使ったSelenium環境の構築はCI環境はもちろん、ローカルでブラウザ自動操作スクリプトを開発するときにも有効です。
VNCでの動作確認
ただし、コンテナ内でブラウザが起動するということは、ブラウザが動いている様子もみることができないということです。
そこで、selenium/node-chrome-debugといった、-debugという接尾辞がついたコンテナイメージが用意されています。このイメージは、VNCサーバも起動するので、そこにVNCクライアントで接続することで、ブラウザの動作状況等を確認することができます。
$ docker pull selenium/node-chrome-debug:3.6.0-bromine $ docker run --rm -d -P --link selenium-hub:hub selenium/node-chrome-debug:3.6.0-bromine $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cdaffeb1b08c selenium/node-chrome-debug:3.6.0-bromine "/opt/bin/entry_po..." 4 seconds ago Up 3 seconds 0.0.0.0:32768->5900/tcp epic_goodall cdaa51487791 selenium/hub:3.6.0-bromine "/opt/bin/entry_po..." 3 minutes ago Up 3 minutes 0.0.0.0:4444->4444/tcp selenium-hub
node-chrome-debugを起動後docker psすると、ローカルの32768番ポートがコンテナのVNCサーバのポートである5900に向いていることがわかります(実行環境によって異なりますので適宜読み替えてください)。したがってこの場合だと、vnc://localhost:32768に適当なVNCクライアントで接続することができます。なお、VNCサーバはデフォルトではsecretというパスワードが設定されています。
これにより、ブラウザの挙動をみたり、ローカルのブラウザと同じようにDeveloper ToolsでDOMを確認したりすることができます。
