見出し画像

【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



この記事が気に入ったらサポートをしてみませんか?