本記事では、Docker上で、「実際に動く」SeleniumとPythonの環境の作り方をご紹介します。
最終的には、Docker上でSeleniumを使って、「yahooで何かを検索して、検索結果の画面をスクリーンショットする」サンプルプログラムも紹介します。(この部分はnoteに公開)
少しわかりづらいですが、こんなイメージです。
最近、何かと多い画面操作を自動化することにハマってます。
わかりづらいですが、Googleで何かを検索して、その画面を保存するプログラムです。
iPadで動きが見れるように設定してるので、色々検証しやすい。 pic.twitter.com/LB2qvi7P68
— いなサラ|田舎の情シスサラリーマン・パパブロガー (@inasala_com) November 26, 2020
想定読者
・DockerでSeleniumを使ってブラウザの画面操作をしてみたい。
・自身の端末にDockerをインストールされている。
DockerでSeleniumとPythonを使うには
Docker上でSeleniumを使おうとして、pip seleniumでインストールし、パソコンにChrome driverを入れてもなかなか使えない。。
という方も多いのではないでしょうか?
実はDocker上でSeleniumを使うには、パソコン上のブラウザにアクセスして使うのは困難(できない?)です。
このため、Docker上でSeleniumを使うには、次の3つの環境(コンテナ)が必要となります。
・selenium/hub
・selenium/node-chrome-debug
・Python環境
selenium/hub
これは、「selenium/node-chrome-debug」に向けてseleniumのコマンド(処理)を実行するための環境(コンテナ)です。
このコンテナのイメージは、Docker hubで公開されていて、誰でも使えます。
selenium/node-chrome-debug
これは、selenium/hubからの処理を実際にChromeで実行する環境です。
1つのselenium/hubに対して、複数の実行環境を作ることも可能です。
また、実行画面を確認するために、VNCという画面共有するアプリもインストールされています。
これもDocker hubで公開されています。
Docker hub - selenium/node-chrome-debug
Python環境
これは、Pythonを動かす環境です。
ライブラリとしては、最低限pip seleniumでSeleniumだけ入っていればOKです。
全体イメージはこのようになります。
Docker上でSelenium・Pythonを使うメリット
正直、PythonとSeleniumを使う分には、Docker上で行わなくてもできます。むしろ、Dockerを使わない方が、断然に簡単にできます。
ローカルのパソコンにChrome Driverを入れて、それをPythonで繋いで実行するだけなので。
ただ、Docker上でSeleniumを使うメリットを3つ紹介します。
・レンタルサーバなどの他の環境にも移行しやすい。24時間スケジュール実行も可能となる。
・別端末からSeleniumの実行画面を確認できる。
・簡単に複数のSelenium+Python環境を構築できる。
レンタルサーバなどの他の環境にも移行しやすい。24時間スケジュール実行も可能となる
DockerでSelenium・Pythonを作ることで、他の環境にも移行しやすくなります。
Dockerイメージに元になっているDockerfileとdocker-composeファイルさえあれば、簡単に同じ環境を構築できるからです。
これにより、レンタルサーバなどの外部サーバにselenium+Python環境を作れば、24時間なにかの処理を行わせることもできます。
別端末からSeleniumの実行画面を確認できる。
selenium/node-chrome-debugに画面共有のアプリも搭載されているため、パソコンでプログラムを実行して、動作確認は別端末で行うことも可能になります。
上のツイートの動画のようなイメージです。
端末を分けることで、動作確認の作業効率も上がります。
また、個人ではなかなかしないかもしれませんが、複数端末でも動作確認をできるようになります。
簡単に複数のSelenium+Python環境を構築できる。
Selenium+Python環境といっても、Pythonのバージョン、インストールするライブラリによって複数のPython環境でSeleniumを使うことがあります。
例えば、こんな感じのバリエーションです。
・Selenium+Python環境(Anacondaあり)
・Selenium+Python環境(Anacondaなし、Pythonのみ)
・Selenium+Python環境(cron利用)
こんな時に、Dockerだと(実際のパソコン単位ではなく)コンテナ単位ですぐに作ることができ、とても便利です。
Docker上でSeleniumとPython環境を構築する方法
それでは、Docker上でSeleniumとPython環境を構築する方法を紹介します。
既にパソコンにDockerが入っている方は、次の5つのステップを行えば、すぐにDockerでSelenium+Python環境が作れ、サンプルプログラムを実行できます。
必要なファイルは次の3つのファイルになります。
・docker-compose.yml
・Dockerfile
・sample.py(サンプルプログラム)
yahooで何かを検索して、検索結果の画面をスクリーンショットするといった簡単な処理です。
ファイルの中身は、他のサイトなどを参考にして自分で考えてみると、かなり勉強になります!
この3つのファイルの中身は、次のnoteで公開しています。
Docker上でSeleniumとPythonを動かすコード【composeでビルド】 ※質問対応あり
他のサイトで調べる時間がない・・
すぐに動作するものを作りたい!!
という方は参考にしてみてください。ファイルの内容について質問対応もしています。
DockerでSeleniumとPython環境を構築する手順
それでは、上の3つのファイルを使って、環境を構築する手順を説明します。
step
1 3つファイルを同一フォルダに格納する
上の3つのファイルを任意の同一フォルダに格納します。
step
2 docker-composeでDockerイメージをビルドする
Macの場合はターミナル、Windowsの場合はコマンドプロンプトで、step1で作成したフォルダに移動し、ビルドのコマンドを打ちます。
cd (step1のフォルダ)
docker-compose build
・・・・
Successfully built 0da06b4ce83f
Successfully tagged selenium_build_web:latest
最後に、Seccessfully builtとtaggedができていればOKです。
selenium_build_webの部分は、step1の「フォルダ名+_web」となります。
step
3 docker-composeからコンテナを起動する
ビルドが終わったら、次はターミナルorコマンドプロンプトでコンテナを起動します。
docker-compose up -d
Creating selenium-hub ... done
Creating python-selenium ... done
Creating chrome ... done
上の3つのコンテナがdoneとなっていればOKです。
これにより、3つのコンテナが正常に起動している状態です。
step
4Python環境のコンテナのbashを起動する
次のコマンドの通り、Python環境のコンテナのbashを起動します。
docker exec -it python-selenium bash
これにより、コンテナのOSに入ることができます。
step
5Seleniumのサンプルコードを実行する
step1で作成したフォルダをマウントしている、workフォルダに移動します。
そして、workフォルダ内の「sample.py」を実行します。
「sample.py」を実行する前に、vncアプリ(AppStore or Google Playから無料ダウンロード可能)を起動しておくと、モバイル端末で、処理の画面遷移を確認できます。
cd work
python sample.py
この処理で、step1で作成したフォルダ(Pythonコンテナのworkフォルダ)にスクリーンショットの画像ファイルをが保存されます。
今回は、本ブログの名前「inasala note」と検索したので、次の画像が保存されました。
DockerでSeleniumとPython環境を停止する手順
停止するときは、次の2ステップになります。
step
1Python環境のコンテナから出る
これはコンテナ上で、exitと打つだけです。
exit
step
2コンテナを停止する
パソコンのターミナル or コマンドプロンプト上で、次のコマンドをうち、3つのコンテナを停止します。
docker-compose down
Stopping python-selenium ... done
Stopping chrome ... done
Stopping selenium-hub ... done
Removing python-selenium ... done
Removing chrome ... done
Removing selenium-hub ... done
Removing network selenium_build_default/code>
上のようにすべて「done」になれば、正常に停止できてます。
以上、Docker上でSeleniumとPythonを動かす方法の解説でした。
ぜひぜひSeleniumでいろんなサイトの自動プログラムを作ってみてください。
以上となります。
最後まで読んでいただき、ありがとうございました。
0からDockerを知りたい方向け
Pythonは、パソコンではなくDockerで使った方がよいメリットを解説しています。
0からPythonを勉強したい方向け
おすすめのUdemy講座を紹介します。筆者もこの講座で勉強しました。