はじめに
seleniumとchromedriverを用いたスクレイプ環境をDockerコンテナ上で構築したので、そのやり方といくつかハマりポイントをまとめます。
今回動かしたかったライブラリはざっくり以下です。
from selenium import webdriver
import chromedriver_binary
from selenium.webdriver.chrome.options import Options
やり方
Dockerfile
下記のサイトに記載されているDockerfileをお借りしました。
Docker 内で Chrome とSelenium を使ったスクレイピング実行環境を構築してみた
実行、エラー
そのままdocker buildして、スクレイプを実行すると次のように怒られます。
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 93
このときインストールしたgoogle-chrome-stableのバージョンが92だったので、ChromeDriverのバージョンを92用にしても、なぜか同様のエラーが出ました。なぜonly supports version 93になってしまうのかわかっていないのですが、仕方ないのでgoogle-chromeをversion 93にしました。
google-chromeのバージョン指定
この時点でversion 93はstable版ではありません。なので、次のようにgoogle-chrome-unstableをバージョン指定でインストールしました。
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add && \
wget http://dl.google.com/linux/deb/pool/main/g/google-chrome-unstable/google-chrome-unstable_93.0.4577.18-1_amd64.deb && \
apt-get install -y -f ./google-chrome-unstable_93.0.4577.18-1_amd64.deb
バージョン名(93.0.4577.18-1)は以下のサイトで調べられます。希望するバージョン名を調べて、置き換えてください。
Package "google-chrome-unstable"
chromedriverのバージョン指定
google-chromeのバージョンに合わせてchromedriverのバージョンも適切なものにします。下記サイトよりバージョンを選択して、"chromedriver_linux64.zip"のダウンロードリンクを取得します。
ChromeDriver - WebDriver for Chrome - Downloads
次のように、Dockerfileのchromedriverインストール部分のURLを変更してください。
ADD https://chromedriver.storage.googleapis.com/93.0.4577.15/chromedriver_linux64.zip /opt/chrome/
まとめ
最終的に、次のようなDockerfileになりました。
FROM python:3
RUN apt-get update && apt-get install -y unzip wget vim
# google-chrome 変更部分①
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add && \
wget http://dl.google.com/linux/deb/pool/main/g/google-chrome-unstable/google-chrome-unstable_93.0.4577.18-1_amd64.deb && \
apt-get install -y -f ./google-chrome-unstable_93.0.4577.18-1_amd64.deb
# ChromeDriver 変更部分②
ADD https://chromedriver.storage.googleapis.com/93.0.4577.15/chromedriver_linux64.zip /opt/chrome/
RUN cd /opt/chrome/ && \
unzip chromedriver_linux64.zip
# python package
RUN pip install selenium && \
pip install bs4 && \
pip install oauth2client
ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/chrome
元記事様から、変更した部分をが2つありました。
こちらのDockerfileの、バージョン名を適宜変更すれば、環境構築に成功するのではないでしょうか。
おわりに
最後までご精読ありがとうございました。
他の解決方法や、ChromeDriverのversionに関係なくThis version of ChromeDriver only supports Chrome version 93
になってしまう原因が分かる方いましたらコメントで教えて頂けますと幸いです。