環境
- Windows 10
- Python 3.9.4
- VSCode
Docker環境でも、ローカルのマシン同様にchromedriver-binaryをインストールして、パスを通して・・・とすれば比較的簡単にSelenium環境を構築できます。しかしながら、せっかくDockerを使用するので、Python用のコンテナとは別にSeleniumコンテナを用意して責務を分けたほうがスマートなので、今回はそちらの方法を紹介します。
個人的には、pytest等での単体テストもしやすくなるという点でも、seleniumコンテナを立てるやり方のほうがおすすめかと思います。
構築手順
pythonコンテナとseleniumコンテナを起動し、コンテナ間で通信することでseleniumを動かせるようにします。
コンテナ起動
任意のディレクトリで、以下を実行
git clone https://github.com/masayan1126/docker-python.git
cd docker-python
ビルド
docker-compose build
コンテナ起動
docker-composer up -d
- Seleniumの方の公式イメージである、selenium/standalone-chromeを使用
- Seleniumコンテナがメモリ不足で強制終了しないように、ホスト側のメモリ領域(/dev/shm)を共有する
https://hub.docker.com/r/selenium/standalone-chrome/
docker-compose.yml
version: '3'
services:
selenium:
image: selenium/standalone-chrome
container_name: 'selenium'
volumes:
- /dev/shm:/dev/shm
python3:
restart: always
build: .
container_name: 'py3-container'
working_dir: '/var/app'
tty: true
volumes:
- ${SRC_PATH}:/var/app
depends_on:
- selenium
ホストOS側のSRC_PATHとコンテナをマウントしているので、実際のソースコードのパスをenvファイルを作成し、記載するようにしてください。
.env
SRC_PATH=your src path
Dockerfile
FROM python:3.9.4-slim
# linuxのパッケージインストールなど必要なものを。
# RUN apt update
# RUN apk --update add vim
ENV PYTHONPATH "${PYTHONPATH}:/var/app/"
RUN pip install --upgrade pip
WORKDIR /var/app
RUN pip install --upgrade pip && \
pip install pipenv
Dockerfileです。ビルド時は、そこまでやることはないですが、強いて挙げるなら自作pythonスクリプトのpathを通しているくらいです
https://maasaablog.com/development/python/3747/
動作確認
seleniumを使用する側のpythonスクリプトは以下のとおりです。
from selenium import webdriver
from selenium.webdriver import DesiredCapabilities
driver = webdriver.Remote(
command_executor="http://selenium:4444/wd/hub",
desired_capabilities=DesiredCapabilities.CHROME.copy(),
)
driver.get("https://maasaablog.com/")
print(driver.title)
driver.quit()
使用方法は、通常のseleniumの書き方とほぼ同じですが、webdriver.Remote()の引数command_executorには、通信先のseleniumコンテナを指定する必要があります
プログラムを実行する
pythonコンテナに入る
docker-compose exec py3-container bash
コンテナ内で、プログラムを実行してseleniumコンテナと通信する
pipenv run python packages/hoge.py
// masayanblog | 現役のweb系エンジニアが役立つ情報をまったりご紹介
プログラムを実行して、本ブログのタイトルタグのテキストがコンソールに出力されていればOKです。
まとめ
いかがでしたでしょうか。本記事では、Python&Docker環境でSeleniumを使えるようにするための方法について紹介しています。ぜひ参考にしてみてください。