※このブログではサーバー運用、技術の検証等の費用のため広告をいれています。
記事が見づらいなどの問題がありましたらContactからお知らせください。


Python用SeleniumをDockerコンテナで作成する方法の解説

selenium 自動化 Docker

投稿日:2019年9月1日

このエントリーをはてなブックマークに追加
seleniumはWeb開発の自動テストやスクレイピングをするためのツールです。これをうまく活用することで開発が非常に楽になります。しかし、このソフトは環境を整えるのが少しだけ面倒です。この記事ではDockerをうまく活用してSeleniumの環境を作成する方法について解説します。

はじめに

この記事について

この記事ではWebブラウザの自動化ツールSeleniumの環境をDockerで構築する方法についてまとめます。ここで構築する環境はPython用のコンテナになります。

作成する環境については以下の通り

  • python 3.7.3
  • chrome 76
  • selenium 3.141.0

Seleniumとは

SeleniumとはWebの動作を自動化するツールです。これを使うことでWeb開発のテストの自動化、データのスクレイピングなどのプログラムを作成することができます。Seleniumを使うには以下の環境が必要になります。

  • ブラウザ
  • ブラウザのドライバー

Dockerでこれらの環境を用意するにはこれらをコマンドからインストールしなければいけません。


実践

環境作成

まずはじめに必要なディレクトリ、ファイルを作成します。作成する環境は以下のとおりです。

selenium_sample
├── docker-compose.yml     # ファイル
└── python_app
    ├── Dockerfile              # ファイル
    └── src
selenium_sample/python_app/Dockerfile
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
selenium_sample/docker-compose.yml
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をつける機能があるので、それを使い起動させてみましょう。

selenium_sample/python_app/src/selenium_example.py
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を見ていただくとわかると思います。


参考書籍

このエントリーをはてなブックマークに追加


関連記事

記事へのコメント