投稿日:2019年9月1日
seleniumはWeb開発の自動テストやスクレイピングをするためのツールです。これをうまく活用することで開発が非常に楽になります。しかし、このソフトは環境を整えるのが少しだけ面倒です。この記事ではDockerをうまく活用してSeleniumの環境を作成する方法について解説します。
この記事ではWebブラウザの自動化ツールSeleniumの環境をDockerで構築する方法についてまとめます。ここで構築する環境はPython用のコンテナになります。
作成する環境については以下の通り
SeleniumとはWebの動作を自動化するツールです。これを使うことでWeb開発のテストの自動化、データのスクレイピングなどのプログラムを作成することができます。Seleniumを使うには以下の環境が必要になります。
Dockerでこれらの環境を用意するにはこれらをコマンドからインストールしなければいけません。
まずはじめに必要なディレクトリ、ファイルを作成します。作成する環境は以下のとおりです。
selenium_sample
├── docker-compose.yml # ファイル
└── python_app
├── Dockerfile # ファイル
└── src
FROM python:3.7.4-stretch
# パッケージの更新確認
RUN apt-get -y update
#chromeブラウザのインストール
RUN apt-get install -y unzip
RUN curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add
RUN echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list
RUN apt-get -y update
RUN apt-get -y install google-chrome-stable
# chromeドライバのインストール
RUN curl -OL https://chromedriver.storage.googleapis.com/76.0.3809.126/chromedriver_linux64.zip
RUN unzip chromedriver_linux64.zip chromedriver
RUN mv chromedriver /usr/bin/chromedriver
# 作業ディレクトリの作成
RUN mkdir /selenium
COPY ./src /selenium
WORKDIR /selenium
# Seleiumのインストール
RUN pip install selenium==3.141.0
version: '3'
services:
python_app:
build: ./python_app
volumes:
- ./python_app/src:/scraping
tty: true
必要なファイルとディレクトリの作成ができたら、docker-composeを起動させてみましょう。
$ sudo docker-compose build # Imageのビルド
$ sudo docker-compose up -d # コンテナを起動してバックグラウンドで起動
$ sudo docker ps -a # コンテナの起動の確認
コンテナの起動が確認できたら実際にseleniumが起動できるか確認してみます。/python_app/srcディレクトリが起動したコンテナにボリュームとしてマウントしてあるので、そこにpythonファイルを作成することでコンテナ内で実行できます。
ここで注意してほしいのが、dockerコンテナは通常の環境と少し違うため起動するときにはいくつかoptionをつけなければならないという点です。seleniumにもoptionをつける機能があるので、それを使い起動させてみましょう。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# docker内で起動するためのoptionを作成
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
# option込でChromeを起動
driver = webdriver.Chrome(options=options)
# アクセスしたいページのURL
driver.get("http://www.python.org")
assert "Python" in driver.title
# 検索ボックスを探す
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
# 検索
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
print(driver.page_source)
driver.close()
プログラムの作成ができたらDockerのコンテナに入ってこのプログラムを実行してみましょう。
$ sudo docker exec -it selenium_sample_python_app_1 bash # コンテナに入る
$ cd /selenium # 作業ディレクトリに移動
$ python selenium_example.py # プログラムの実行
ページのHTMLが表示されたらOKです。詳しいseleniumの使い方についてはDocumentを見ていただくとわかると思います。