Selenium

【Python】Docker+Seleniumで自動化環境を構築してVNCでブラウザの動作確認

この記事は約9分で読めます。

 

はじめに

 

本記事では、Python、Docker、Seleniumを組み合わせてブラウザの自動化環境を構築し、VNCを使ってリアルタイムで動作を確認する方法を紹介します。Seleniumを使用することで、ブラウザの操作を自動化し、テストやスクレイピングを効率的に行うことができます。Dockerを使用することで、環境依存を排除し、どのマシン上でも同じ環境で実行することが可能です。

 

具体的にはPython実行環境とSeleniumHQ/docker-seleniumはDocker Composeを利用して別のコンテナとして立てます。そしてSeleniumHQ/docker-seleniumを通じてVNC接続することで、簡単にクローラの挙動をチェックできます。

 

構築環境はWindowsのdocker for desktopを想定しています

 

環境構築

 

必要なツールとライブラリ

 

  • Docker(docker for desktop)
  • Python
  • Selenium(4.14)
  • VNC Viewer(Realvnc)

 

Docker

 

・Dockerのインストール
https://www.docker.com/products/docker-desktop/

 

VNC

 

Docker環境は完全に閉じた環境なので、ホストマシンのブラウザを見ながらのデバッグができません。
そこで、Docker環境内にあるLinux上のデスクトップ画面をリモートアクセスして表示するために、VNCツールを使います。VNCソフトは色々ありますが自分はRealvncを使用しています

 

・Realvncのダウンロード

https://www.realvnc.com/en/connect/download/viewer/

 

Dockerイメージの準備

 

以下のGITのリポジトリを手動かgit cloneでダウンロードしてください

イメージの中身は有志の方が作成してくださったサンプルを一部改良しています

 

GITのURL:https://github.com/beginerSE/docker_python_selenium_test

 

ディレクトリ構成

 

.devcontainer
    devcontainer.json
app\
    .vscode\
        launch.json
        settings.json
    src\
        test.py
    Dockerfile
    requirements.txt
build.sh
docker-compose.yml

 

 

<Dockerfile>

FROM python:3.7-slim-buster

ENV PYTHONIOENCODING utf-8
ENV TZ="Asia/Tokyo"
ENV LANG=C.UTF-8
ENV LANGUAGE=en_US:en

WORKDIR /app

COPY ./requirements.txt ./requirements.txt

RUN \
  pip install -r requirements.txt

 

<requirements.txt>

autopep8==1.5.7
pycodestyle==2.7.0
selenium==4.11.0
toml==0.10.2
urllib3==1.26.5

 

<docker-compose.yml>

version: "3"
services:
  selenium:
    container_name: python-selenium-on-docker_selenium
    image: selenium/standalone-firefox-debug:3.141.59
    ports:
      - 4444
      - 5901:5900
    volumes:
      - /dev/shm:/dev/shm
  app:
    container_name: python-selenium-on-docker_app
    depends_on:
      - selenium
    build: ./app
    volumes:
      - ./app:/app
    environment:
      SELENIUM_URL: http://selenium:4444/wd/hub
    tty: true

 

設定確認

 

ダウンロードしたらDOCKERのホーム画面から「setting」→「Resources」→「File sharing」にリポジトリのフォルダのパスを追加して「apply&restart」を押して設定を反映させてください

 

 

これを行わないと「Docker : Error response from daemon: user declined directory sharing」というエラーが発生することがあります。

 

またアイコンの部分を右クリックして以下のようにswitch to linux containerが表示されている場合はこれをクリックしてください

 

 

コンテナの起動&環境構築

 

次は実際に環境構築を行います。具体的にはcdコマンドで「docker-compose.yml」がある直下のディレクトリにアクセスして以下のコマンドでコンテナを起動します

 

cd C:\Users\xxxx\ダウンロード\python-selenium-on-docker-master ←PATHは環境に合わせて変更

docker-compose build --no-cache
docker-compose up -d
docker-compose exec app bash

 

実行するとコンソールの画面の左端が ~~>から

root@<コンテナID>:/app# に代わっていればコンテナ起動&コンテナ内へのアクセスが成功しています

 

VNC Viewerの起動

 

VNC Viewerを使用して、ブラウザの操作をリアルタイムで確認します。具体的にはVNC Viewerを開き
接続先にlocalhost:5900を入力して接続をクリックします。(パスワードはデフォルトでsecretです。)

 

以下の画像のような画面が表示されていればアクセス成功です。これで、Dockerコンテナ内で実行されているブラウザの操作をリアルタイムで確認することができます。

 

 

 

Seleniumのスクリプトを実行して動作確認

 

コンテナ内のBASHにアクセスしている状態で以下のコマンドを実行しSeleniumを起動します

 

(root@<コンテナID>:/app#) python /app/src/test.py

 

<test.py>

import os
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import selenium

print("seleniumのバージョン",selenium.__version__)
from selenium.webdriver.firefox.options import Options as FirefoxOptions
options = FirefoxOptions()
cloud_options = {}
cloud_options['build'] = "build_1"
cloud_options['name'] = "test_abc"
options.set_capability('cloud:options', cloud_options)


driver = webdriver.Remote(
    command_executor=os.environ["SELENIUM_URL"],
    options=options
)
driver.implicitly_wait(5)

# ここからコーディング

driver.get("https://www.time-j.net/worldtime/country/jp")

print(driver.find_element(By.XPATH, "/html/body/div/div[6]/div[1]/div/p[5]").text)
driver.quit()

 

<出力結果(例)>

PCの内蔵時計は、0.2秒遅れています。
Seleniumの動作確認用プログラムです。

 

実行するとVNC Viewerでブラウザが起動しサイトにアクセスが始まります

 

コンテナの終了

 

Dockerコンテナ内で起動したBashから抜けるためには、以下のコマンドを使用します。

 

(root@<コンテナID>:/app#)exit

 

このコマンドを実行すると、現在のBashセッションが終了し、元のホストマシンのシェルに戻ります。

もしexitコマンドがうまく機能しない場合は、Ctrl + Dを押すことでBashセッションを終了することもできます。これはBashセッションの終了と同様の効果を持ちます。

 

またバックグラウンドで起動しているコンテナをシャットダウンするには以下のコマンドを実行します

$ docker-compose down

 

 

 

pyファイルやモジュール更新を反映させる

 

requirement.txtへのモジュールの追加やPYファイルの記述を変更した際に変更を反映するにはコンテナをREBUILDする必要があります。実行コマンドは最初に実行した以下の2つです

 

docker-compose build --no-cache 
docker-compose up -d

 

まとめ

 

この記事では、DockerとSeleniumを使用してブラウザの自動化環境を構築し、VNCを使って操作を視覚的に確認する方法を紹介しました。これにより、開発環境の差異を気にせず、安定した自動化テストやスクレイピングを行うことが可能です。

 

参考:https://qiita.com/ryoheiszk/items/93b2d52eec370c09a22e

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

  1. […] 前回の記事:【Python】Docker+Seleniumで自動化環境を構築してVNCでブラウザの動作確認 […]

  2. […] 前回の記事:【Python】Docker+Seleniumで自動化環境を構築してVNCでブラウザの動作確認 […]

タイトルとURLをコピーしました