今回は、
Webブラウザの自動操作を可能にするSelenium
Seleniumは、
今回、
一方、
さらに、
Selenium Serverのセットアップ手順は複雑ですが、
なお、
Dockerのインストール
UbuntuのレポジトリでもDockerのパッケージが提供されていますが、
インストールは、
$ sudo apt-get update $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg $ echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null $ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io
また、
$ COMPOSE_VERSION=$(git ls-remote https://github.com/docker/compose | grep refs/tags | grep -oE "[0-9]+\.[0-9][0-9]+\.[0-9]+$" | sort --version-sort | tail -n 1) $ curl -L https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` | sudo tee /usr/local/bin/docker-compose > /dev/null $ sudo chmod +x /usr/local/bin/docker-compose
なお、
$ sudo gpasswd -a $USER docker
Selenium公式のDockerイメージを選ぶ
Seleniumの公式Dockerイメージは、
- Baseイメージ
- selenium/
base:JavaランタイムとSeleniumサーバーのJARファイルが含まれるベースイメージ
- selenium/
- 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イメージ
- selenium/
- Grid Hubイメージ
- selenium/
hub: Grid Hubが動くイメージ
- selenium/
- 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イメージ
- selenium/
多くのイメージがありますが、
なお、

Dockerコンテナで動くのはUbuntu版の各種Webブラウザですが、
docker-composeでStandaloneイメージのコンテナを実行する
Seleniumの公式Dockerイメージのままでも自動操作はできるのですが、
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
最後の行の
そして、
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に接続するポート番号は、
SCREEN_
これで、
$ docker-compose up -d
PythonからWebブラウザを操作する
起動したDockerコンテナでは、
プログラムからDocker Serverを介してブラウザを操作するには、
$ sudo apt install python3-pip $ pip3 install selenium
これで、
#!/usr/bin/python3
from selenium import webdriver
import time
# Chromeのオプション
options = webdriver.ChromeOptions()
options.add_argument("--start-maximized")
# Selenium Serverに接続
driver = webdriver.Remote(command_executor='http://localhost:4444/wd/hub',
options=options)
try:
# 要素の待機時間を最大10秒に設定
driver.implicitly_wait(10)
# https://gihyo.jp を開く
driver.get('https://gihyo.jp')
# 検索ボックスに「Ubuntu」を入力
element_search_form = driver.find_element_by_id('searchFormKeyword')
element_search_form.send_keys('Ubuntu')
# 検索ボタンをクリック
element_search_button = driver.find_element_by_id('searchFormSubmit')
element_search_button.click()
time.sleep(5)
# 検索結果のタイトルを取得して出力
element_titles = driver.find_elements_by_xpath("//a[@class='gs-title']")
for element_title in element_titles:
if not element_title.text.strip():
continue
print(element_title.text.strip())
except:
import traceback
traceback.print_exc()
finally:
# Chromeを終了
input("何かキーを押すと終了します...")
driver.quit()
実行すると、

このように、
Seleniumの詳しい使い方、