今回はDockerを使って、MacのターミナルからSeleniumを実行します。Seleniumを動かす言語はPythonです。所要時間は以下の「前提条件」が整っていれば、5分以内で終わりますので非常に簡単です。

Seleniumを動かしたときの動画を貼っておきます。コマンドを実行すると、画面内でブラウザが勝手に立ち上がり「Docker Selenium」と検索して、その検索結果が表示されているのが分かります。(分かりにくいですが、コマンド実行中はカーソルしか動かしていません。)

前提条件

Macで以下をインストール済みであることが前提です。別記事をググっていただければすぐに出来ますので、こちらの記事では省きます。

  • Homebrew
  • Python3
  • Git
  • Docker for Mac

各コマンド

Seleniumを実行するまでの各コマンドです。

chromedriverをインストール

$ brew install chromedriver

seleniumをインストール

$ pip3 install selenium

GitHubからseleniumのパッケージをダウンロード

$ git clone https://github.com/sikkimtemi/selenium

seleniumフォルダに移動

$ cd selenium

Dockerを起動する(-dはbackgroundという意味)

$ docker-compose up -d

MacでGoogleChromeなどのブラウザを開いて【vnc://localhost】にアクセスします。

その時「共有画面を開きますか?」と聞かれますので、「共有画面を開く」をクリックします。

接続先は「localhost」です。
mac-selenium

次にパスワードを聞かれますので「secret」と入力してサインインしてください。
mac-selenium2

このような画面が開かれます。

Selenium(sample.py)を実行します。

$ docker exec -it python /root/script/sample.py

これで共有画面を見ると、画面内でブラウザが勝手に立ち上がり「Docker Selenium」と検索しているのが分かります。Seleniumの実行については以上です。

sample.pyのコード

今回実行したpythonのコードは以下のとおりです。コードを見ると「browser.save_screenshot」で、ブラウザ上で画面のスクショを取っていることが分かります。

#!/usr/local/bin/python3
from selenium import webdriver
#from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from time import sleep
import datetime

def execSearch(browser: webdriver):
    """
    Googleで検索を実行する
    :param browser: webdriver
    """
    # スクリーンショットのファイル名用に日付を取得
    dt = datetime.datetime.today()
    dtstr = dt.strftime("%Y%m%d%H%M%S")

    # Googleにアクセス
    browser.get('https://www.google.co.jp/')
    sleep(1)

   # キーワードの入力
    search_box = browser.find_element_by_name("q")
    search_box.send_keys('docker selenium')

    # 検索実行
    search_box.submit()
    sleep(1)

    # スクリーンショット
    browser.save_screenshot('images/' + dtstr + '.png')


if __name__ == '__main__':
    try:
        #browser = webdriver.Firefox()  # 普通のFilefoxを制御する場合
        #browser = webdriver.Chrome()   # 普通のChromeを制御する場合

        # HEADLESSブラウザに接続
        browser = webdriver.Remote(
            command_executor='http://selenium-hub:4444/wd/hub',
            desired_capabilities=DesiredCapabilities.CHROME)

        # Googleで検索実行
        execSearch(browser)

    finally:
        # 終了
        browser.close()
        browser.quit()

他のコマンド

Finderでsample.pyファイルを置いているフォルダを開くには、Macのopenコマンドを使います。(hogeは自分の環境に合わせてください)

$ open /Users/hoge/selenium/script/

openコマンドを利用して、FinderからSeleniumで取得した画像を見ることも出来ます。

$ open /Users/hoge/selenium/script/images/

起動中のDockerを確認します。

$ docker ps

Dockerを終了します。

$ docker-compose down

すべてのDocker情報を確認します。

$ docker ps -a

参考

Docker上でSeleniumとHeadless ChromeとPython3を動かす