Masayan tech blog.

  1. ブログ記事一覧>
  2. Python&Docker環境でSeleniumを使えるようにする

Python&Docker環境でSeleniumを使えるようにする

公開日

環境

  • 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を使えるようにするための方法について紹介しています。ぜひ参考にしてみてください。