Jupyter側からSelenium操作を可能にする
JupyterLabからSeleniumを利用してブラウザ操作を行う環境をDockerコンテナで環境構築して、最終的にはローカル環境を汚さず、再現性のあるスクレイピング・スクリプトファイルの開発ができるようにする。
仮想環境からSeleniumの操作を実現するには、「Google Chrome」と「chromedriver」をバージョンを揃えてインストールする必要がある。
本記事では、dockerコンテナを立ち上げる度にバージョンがズレて操作できなることを防ぐために、「バージョンを双方一致させる」コーディングを試みた過程をメモしている。
#Dockerfile:共通部分
# ChromeとChromedriverのバージョンを一致させてダウンロードするため
RUN apt-get update && apt-get install -yq --no-install-recommends \
gnupg \
jq && \
apt-get clean && rm -rf /var/lib/apt/lists/*
- ChromeとChromedriverのバージョンを一致させてダウンロードするため:jq
#Dockerfile:Google Chrome
# ”google-chrome-stable --version"
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add && \
echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | tee /etc/apt/sources.list.d/google-chrome.list && \
apt-get update && \
apt-get install -y google-chrome-stable
- Google Chrome の安定版(Stable)を Linux 環境にインストールする
#Dockerfile:ChromeDriver
# ”chromedriver --version"
RUN mkdir -p /opt/chrome && \
CHROME_VERSION=$(google-chrome-stable --version | awk '{print $3}' | awk -F'.' '{print $1"."$2"."$3}')".0" && \
DRIVER_VERSION=$(curl -s "https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json" | \
jq -r --arg CHROME_VERSION "$CHROME_VERSION" '.versions[] | select(.version==$CHROME_VERSION) | .downloads.chromedriver[] | select(.platform=="linux64") | .url') && \
wget -q -O /opt/chrome/chromedriver-linux64.zip "$DRIVER_VERSION" && \
unzip /opt/chrome/chromedriver-linux64.zip -d /opt/chrome && \
rm /opt/chrome/chromedriver-linux64.zip && \
mv /opt/chrome/chromedriver-linux64/chromedriver /opt/chrome/chromedriver
# ChromeDriver をパスに追加
ENV PATH="/opt/chrome:$PATH"
- Google Chrome のバージョンと一致する ChromeDriverを「公式 JSON API」から自動取得する
まとめ
これらの構成要素を上手くインストールできていると、仮想環境のJupyter側から、Seleniumスクリプトファイルの作成と実行ができる。ただし、ChromeとDriver双方のバージョンを一致させてインストールしないと上手く実行できないため注意すること。
コメント(一覧)