モチベーション
約1年前、ジョブカンの工数入力するツールをseleniumを使って実装しました。
自分自身で今現在も使っていてかなり役立っていますが一つだけ課題がありました。
それは、chromeブラウザのバージョンがいつの間にか上がっていてchrome driverのバージョンと不適合ということでプログラムがエラーになり、その度にchrome driverをダウンロードし直す必要があるということでした。
ということで、その煩わしさから解放されるべくdockerコンテナを使ってseleniumを動かすことにしました。
最新版のchromeブラウザをインストールする場合
Dockerfileに下記2行でok
RUN apt-get -y update RUN apt-get install -y chromium chromium-driver
chromedriver は /usr/bin/chromedriver
にインストールされます
特定バージョンのchromeブラウザをインストールする場合
特定バージョンのchromeブラウザをインストールしたい場合は先程のように簡単にはいきません。
なぜなら apt-get install -y chromium
だと最新版のchromeがインストールされてしまうからです
ただし、以下の記事で紹介されている Download older versions of Google Chrome for Windows, Linux and Mac というサイトから古いchromeブラウザのパッケージを入手して、インストール可能です。
Dockerfileは次のようになります。
RUN apt-get -y update # Google Chrome dependencies RUN apt-get install -y libasound2 libatk-bridge2.0-0 libatspi2.0-0 libdrm2 libgbm1 libgtk-3-0 libnspr4 libnss3 libxkbcommon0 libxshmfence1 xdg-utils fonts-liberation # Google Chrome (specific version) RUN wget -O /tmp/google-chrome-stable_current_amd64.deb https://www.slimjet.com/chrome/download-chrome.php?file=files%2F90.0.4430.72%2Fgoogle-chrome-stable_current_amd64.deb RUN dpkg -i /tmp/google-chrome-stable_current_amd64.deb && rm /tmp/google-chrome-stable_current_amd64.deb # ChromeDriver (specific version) ADD https://chromedriver.storage.googleapis.com/90.0.4430.24/chromedriver_linux64.zip /opt/chrome/ RUN cd /opt/chrome/ && unzip chromedriver_linux64.zip
基本的に最新のセキュリティ対策がなされている最新バージョンを使うべきですが特定バージョンのchromeブラウザを使いたい場合は参考にしてください
headlessブラウザを使ったときのジョブカン固有の問題
これはジョブカンサイト固有の問題だと思われますが、headlessブラウザを使ったときになぜか挙動が違うという問題が発生しました。
通常ブラウザでのログイン後
headlessブラウザでのログイン後
画面から分かるようにheadlessブラウザだとメニューが畳まれた状態になってしまいます..
想定しているelementが見つからず element not interactable
エラーが出ちゃいます
ググると以下のような記事が見つかったのでウインドウサイズの大きさを変えてみましたが変わりませんでした。 yuki.world
仕方ないのでメニューが畳まれているかを調べて、畳まれていたらメニューを開く操作をするようにしています。
コード
とりあえず、dockerベースでseleniumが動くようになり煩わしさから解放されました
別解?
毎回、MacOSのchromeブラウザのバージョンを調べて、そのバージョンに合ったchromedriverを 公式ダウンロードサイト から自動でダウンロードしてくれば Docker使わなくてもいいんじゃ? と考えましたが難しそうでした
# chromeのバージョンを調べる $ /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version Google Chrome 101.0.4951.64
ただし、すべてのchromeのバージョンに対応したdriverがあるわけではありません...
https://chromedriver.storage.googleapis.com/101.0.4951.64/chromedriver_mac64.zip
にブラウザでアクセスすると NoSuchKey のエラー画面になります
chromedriveのダウンロードページは
となっていて、パッチバージョンまでピッタリなリンクは存在しません
ダウンロードページをWebスクレイピングしてメジャーバージョンだけがマッチするリンクを取り出せば何とかやれそうですがとても面倒くさそうです