2017年9月17日日曜日

DockerでSeleniumとHeadless modeのFirefoxがインストールされたコンテナを作成する

以下のDockerfileを使用して、SeleniumとHeadless modeのFirefoxがインストールされたコンテナを作成します。

Dockerfile

FROM ubuntu:16.04

RUN locale-gen ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:en
ENV LC_ALL ja_JP.UTF-8
ENV MOZ_HEADLESS 1

RUN apt-get update \
  && apt-get -y install bzip2 wget firefox language-pack-ja fonts-ipafont-gothic fonts-ipafont-mincho \
  && wget https://repo.continuum.io/archive/Anaconda3-4.4.0-Linux-x86_64.sh \
  && chmod +x Anaconda3-4.4.0-Linux-x86_64.sh \
  && ./Anaconda3-4.4.0-Linux-x86_64.sh -b -p /opt/anaconda \
  && /bin/bash -c "source /opt/anaconda/bin/activate && pip install selenium" \
  && wget https://github.com/mozilla/geckodriver/releases/download/v0.19.0/geckodriver-v0.19.0-linux64.tar.gz \
  && tar -xvzf geckodriver-v0.19.0-linux64.tar.gz \
  && chmod +x geckodriver \
  && cp geckodriver /usr/local/bin/

CMD "/bin/bash"
コンテナをビルドするには以下のコマンドを実行します。
docker build -t ub1604headlessff .
コンテナ内で実行するpythonスクリプト(以下のsample.py)はdatサブディレクトリ内に保存します。

sample.py

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()

driver.get('https://www.google.co.jp/')
input = driver.find_element_by_name('q')
input.send_keys('selenium')
input.submit()
RESULTS_LOCATOR = "//div/h3/a"

WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.XPATH, RESULTS_LOCATOR)))

# get screen shot
driver.save_screenshot('screenshot1.png')
print("quit")
driver.quit()
サンプルスクリプトをコンテナ内で実行するには、以下のコマンドを実行します。
docker run -v `pwd`/dat:/dat --rm -i -t ub1604headlessff
コンテナに入った後に、以下のコマンドを実行します。
source /opt/anaconda/bin/activate
cd /dat && python sample.py
○関連項目
VagrantでSeleniumとheadlessモードのfirefoxがインストールされた仮想マシンを構築する

0 件のコメント:

コメントを投稿