【Python3+Selenium】DevContainerを使ってChromeとChromedriverのバージョン問題を回避する
DevContainerの使い方はこちら
Seleniumの導入はこちら
概要
DevContainer上にChromeとChromedriverをバージョン指定してインストールすれば、勝手にバージョンアップされなくなるので安定します。
(人間がバージョン低いChromeを操作するわけじゃないし、000.0.0000.01くらいバージョン低いChrome使っててもまあ大丈夫よね、Chromeとdriverが揃ってからバージョンアップすればOKよね、という判断です)
何が起きたか
順調に動いてたRPAプログラムが、Chromeのバージョンアップと共に全部死にました。Win版の最新版Chromeと、公開されている最新版Chromedriverのバージョンが000.0.0000.01違いました。うそやん。
で、今そのバッチ動かしてるのローカルPCなので、バージョン下げたChrome使うのは危ない。ということで、さっさとコンテナ化してサーバーに載せて動かせよ、ということになり、作ったプログラムのコンテナ化をしようとしました。無事動くようになるのに3日掛かった。げっそり。
対応
・Linux上にChromes最新版をインストールする
・Chromeのバージョンを確認する
$ google-chrome --version
・同じバージョンのChromedriverと、ついでにseleniumをpipでインストールする
$ pip install chromedriver-binary==xxx.x.xxxx.xx
$ pip install selenium
ここまで準備が終わったら、pythonファイルでchromedriverとseleniumをインポートして使う
GUI使えないので、headlessmモードで動かさないとエラーになるんだけど、このとき--no-sandboxも付けておかないと真のヘッドレスにはならないらしい。
また、cromedriver.exeをダウンロードして使う場合はそのパスをごにょごにょしないとならないのですが、chromedriver_binaryをpip installした場合は不要です。
from selenium import webdriver
import chromedriver_binary
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--headless")
options.add_argument("--no-sandbox")
driver = webdriver.Chrome(options = options)
# driverが作れたら、後は普通に使う時と同じ
……っていう一連の流れを毎回やるのは大変なので、Dockerfileに書いておくと、こうなる、らしい。(らしい)
# Dockerfile_dev
# 必要なツール(pip等)をインストール
RUN apt-get update && apt-get install -y wget gnupg2 python3-pip --no-install-recommends
RUN python3 -m pip install --upgrade pip
# Chromeをインストール
RUN wget -q -O - https://dl.google.com/linux/linux_singing_key.pub | apt-key add - \
&& echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list
# Chromedriverをインストール
ARG CHROME_DRIVER_VERSION == "xxx.x.xxxx.xx"
ADD https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/${CHROME_DRIVER_VERSION}/linux64/chromedriver-linux64.zip /opt/google/chrome
RUN apt-get install -y unzip
RUN cd /opt/google/chrome/ && \
unzip chromedriver-linux64.zip
RUN pip insatll selenium
RUN pip install chromedriver-binary==${CHROME_DRIVER_VERSION}
ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/user/bin:/sbin:/bin:/opt/google/chrome
この記事が気に入ったらサポートをしてみませんか?