pythonとseleniumを使うことでChromeの操作を自動化してるけど、Chromeのバージョンアップの度にChromeDriverをアップデートしないといけないのが面倒すぎる。。
そんな悩みを持つ同士の方々の助力になれれば嬉しいです。
結論、webdriver_managerというライブラリを利用すれば、面倒な作業を省くことができます!
webdriver_managerを使わない場合はこんなに面倒
こんなソースコードだとします。
※例ではheadlessモードにしていますが、headlessモードでなくても同じです。
# config
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from time import sleep
from selenium.common.exceptions import NoSuchElementException
import sys
import re
# chromedriver-option
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--disable-extensions')
options.add_argument('--proxy-server="direct://"')
options.add_argument('--proxy-bypass-list=*')
options.add_argument('--start-maximized')
options.add_argument("--window-size=1920x1080")
driver = webdriver.Chrome(options=options)
最初のうちはこれで動くんですよね。
ただ、しばらく時間が経ってGoogleChromeがアップデートされてしまい、自分がインストールしているChromeDriverとのバージョンが合わなくなると、以下のようにSessionNotCreatedException
が出てプログラムは動かなくなってしまいます。。(泣)
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 93
Current browser version is 95.0.4638.69 with binary path /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
こうなると、Chromeのバージョンを確認して、いちいちChromeDriverをアップデートする必要があるので、とても面倒なのですよね。。
冒頭でも言いましたが、そういうときはwebdriver_managerを利用することで、面倒な作業をなくしていきましょう!
webdriver_managerを使えるようにしていく
ステップとしてはとても簡単で、以下の2ステップのみで実現できてしまいます。
- webdriver_managerのインストール
- ソースコード修正
webdriver_managerのインストール
インストールするためのコマンドは以下になります!
% pip install webdriver-manager
pipはpythonライブラリを管理するツールのことで、基本的にPythonをインストールすれば標準で付属しているので追加でインストールは不要です。
Pythonのインストールがまだの方は、こちらの記事を参考にしてみて下さい👍
https://toranokoengineer.com/engineer/homebrew-python3-install/
% pip install webdriver-manager
Collecting webdriver-manager Downloading webdriver_manager-3.5.1-py2.py3-none-any.whl (17 kB) Collecting requests Downloading requests-2.26.0-py2.py3-none-any.whl (62 kB) |████████████████████████████████| 62 kB 1.6 MB/s ・・・・・・(省略)・・・・・・ Collecting idna<4,>=2.5 Downloading idna-3.3-py3-none-any.whl (61 kB) |████████████████████████████████| 61 kB 3.2 MB/s Installing collected packages: idna, colorama, charset-normalizer, requests, crayons, configparser, webdriver-manager
Successfully installed charset-normalizer-2.0.7 colorama-0.4.4 configparser-5.0.2 crayons-0.4.0 idna-3.3 requests-2.26.0 webdriver-manager-3.5.1
Successfully installed..と出ていればインストール完了です!
ソースコード修正
冒頭で出したソースコード例に、インストールしたwebdriver_managerを使えるように加筆します。
# config
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from time import sleep
from selenium.common.exceptions import NoSuchElementException
from webdriver_manager.chrome import ChromeDriverManager
import sys
import re
# chromedriver-option
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--disable-extensions')
options.add_argument('--proxy-server="direct://"')
options.add_argument('--proxy-bypass-list=*')
options.add_argument('--start-maximized')
options.add_argument("--window-size=1920x1080")
driver = webdriver.Chrome(ChromeDriverManager().install(),options=options)
赤文字にしているところが加筆した箇所です。たったこれだけです!
たったこれだけで、面倒なChromeDriverをアップデートしなくて済むのです。
やらない手はないですよね。
実行時の留意点
留意点ってほどでもないですが、webdriver_managerを使えるようにしたプログラムを実行した際に、以下のようになる場合があります。
% python sample.py
[WDM] -
[WDM] - ====== WebDriver manager ======
[WDM] - Current google-chrome version is 95.0.4638
[WDM] - Get LATEST driver version for 95.0.4638
[WDM] - Driver [/Users/[your_name]/.wdm/drivers/chromedriver/mac64/95.0.4638.69/chromedriver] found in cache
これは、以前に一度プログラムを実行した際にchromedriverをアップデートしており、そのバージョンをキャッシュに残しているため、2回目以降の実行ではバージョンアップをする必要がないことを指しています。(キャッシュから使用するため)
エラーが起きているわけでないので、ご安心ください!
まとめ
pythonとseleniumでChromeの自動操作をする際に、Chromeのバージョンアップの度にChromeDriverをアップデートしないといけない面倒な作業が、webdriver_managerというpythonライブラリを使うことで解消することができることを見てきました。
ステップとしては簡単で、以下を実行するだけでした。
- webdriver_managerのインストール
- ソースコード修正
これをしたことで、日々の面倒な作業がなくなりかなり楽になったので、是非やってみてください!!