Ubuntu Weekly Recipe

第662回 Docker+Selenium ServerでWebブラウザ自動操作環境を作る

この記事を読むのに必要な時間:およそ 4 分

Selenium公式のDockerイメージを選ぶ

Seleniumの公式Dockerイメージは,Docker Hubで配布されています。2021年4月時点の最新安定版であるdocker-selenium 3のGitHubレポジトリを見ると,以下のイメージが開発・配布されているのが分かります。

Baseイメージ
  • selenium/base:JavaランタイムとSeleniumサーバーのJARファイルが含まれるベースイメージ
Standaloneイメージ
  • selenium/standalone-chrome:ChromeがインストールされたStandaloneイメージ
  • selenium/standalone-firefox:FirefoxがインストールされたStandaloneイメージ
  • selenium/standalone-opera:OperaがインストールされたStandaloneイメージ
  • selenium/standalone-chrome-debug:ChromeとVNCサーバーがインストールされたStandaloneイメージ
  • selenium/standalone-firefox-debug:FirefoxとVNCサーバーがインストールされたStandaloneイメージ
  • selenium/standalone-opera-debug:OperaとVNCサーバーがインストールされたStandaloneイメージ
Grid Hubイメージ
  • selenium/hub: Grid Hubが動くイメージ
Grid Nodeイメージ
  • selenium/node-base:Nodeのベースイメージ
  • selenium/node-chrome:ChromeがインストールされたNodeイメージ
  • selenium/node-firefox:FirefoxがインストールされたNodeイメージ
  • selenium/node-opera:OperaがインストールされたNodeイメージ
  • selenium/node-chrome-debug:ChromeとVNCサーバーがインストールされたNodeイメージ
  • selenium/node-firefox-debug:FirefoxとVNCサーバーがインストールされたNodeイメージ
  • selenium/node-opera-debug:OperaとVNCサーバーがインストールされたNodeイメージ

多くのイメージがありますが,WebブラウザとSelenium Serverが一緒に入っているStandaloneイメージひとつで,ブラウザの自動操作は可能です。本記事では,ChromeとVNCサーバーがインストールされた「standalone-chrome-debug」イメージを利用します。

なお,⁠Grid Hub」「Grid Node」のイメージは,さまざまなブラウザで並行して自動テストを行う「Selenium Grid」を構築する場合に用います。

図1 Selenium Gridの構成図(Seleniumのドキュメントより)

図1

Dockerコンテナで動くのはUbuntu版の各種Webブラウザですが,Windows PCやMacを用意してGrid Nodeをインストールし,複数のOSで動く各種ブラウザ上で並行して動作テストを行うことも可能です。

docker-composeでStandaloneイメージのコンテナを実行する

Seleniumの公式Dockerイメージのままでも自動操作はできるのですが,デバッグ時に日本語を正しく表示するため,日本語フォントなどを追加したイメージにカスタマイズしましょう。そのために,docker-compose.ymlを配置するディレクトリにサブディレクトリ(本記事の例では「custom⁠⁠)を作成し,以下の内容でDockerfileを作成します。

FROM selenium/standalone-chrome-debug:3

USER root
RUN apt-get update \
 && apt-get install -y -q --no-install-recommends \
    fonts-noto-cjk fonts-noto-cjk-extra language-selector-common language-pack-ja \
 && update-locale LANG=ja_JP.UTF-8 \
 && apt-get clean \
 && rm -r /var/lib/apt/lists/*

ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8

USER 1200

RUN x11vnc -storepasswd password ${HOME}/.vnc/passwd

最後の行の「password」はVNC接続時のパスワードなので,任意のものに変更してください。

そして,以下の内容でdocker-compose.ymlを作成します。

version: "3"

services:
  chrome:
    build: custom
    restart: unless-stopped
    ports:
      - 4444:4444
      - 15900:5900
    volumes:
      - /dev/shm:/dev/shm
      - /etc/localtime:/etc/localtime:ro
    environment:
      - SCREEN_WIDTH=1600
      - SCREEN_HEIGHT=900

プログラムからSelenium Serverに接続するポート番号は,デフォルトの4444のままとしています。VNCで接続するポートは,ホストでVNCサーバーが5900番ポートで動作している場合にバッティングしないよう,15900にマッピングしています。

SCREEN_WIDTHとSCREEN_HEIGHTは,接続元となるPCの解像度に合わせて調整してください。

これで,以下のコマンドを実行すると,イメージのダウンロード,ビルドが実行された後,Chromeを自動操作できるコンテナが起動します。

$ docker-compose up -d

著者プロフィール

小林準(こばやしじゅん)

Ubuntu Japanese Team リーダー。2005年より日本国内でUbuntuの普及活動を行っている。著書に,Linuxシステムの管理に必要な知識を解説した『独習Linux』がある。