はじめに
スクレイピングなど何らかの目的でSeleniumを使用している場合は、ドライバのバージョンアップが課題です。
ブラウザのバージョンをあげた場合は、互換性を保つためにドライバのバージョンもあげる必要があるため、保守作業としてドライバのバージョンアップが煩雑になりやすいです。
本記事では、以前書いたルーチンワークはPythonにやらせよう Seleniumで勤怠処理を自動化するを例に、ドライバのバージョンアップを自動化する方法について記載しています。
executable_path
本記事の環境についてSeleniumは4.4で、ブラウザはchromeを使用しています。
前提としてSeleniumを使用する場合は、使用するブラウザに対応するドライバを設定する必要があります。
Selenium 4では、executable_path has been deprecated, please pass in a Service objectの通りにドライバの設定方法が変更されています。
従来のSelenium 3の書き方の場合は、以下のような警告が出力されます。
/Users/workman/Documents/kintai/kintai.py:19: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
browser = webdriver.Chrome(executable_path=driver, chrome_options=options)
またchrome_options
の設定方法も現在は推奨されていないため、同様に警告が出力されます。
/Users/workman/Documents/kintai/kintai.py:19: DeprecationWarning: use options instead of chrome_options
browser = webdriver.Chrome(executable_path=driver, chrome_options=options)
上記公式のリンクを参考にしながら、以下のように修正します。
Service object
と、options
を使用してそれぞれ設定します。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
service = ChromeService(executable_path=<chrome driverのパス>)
browser = webdriver.Chrome(service=service, options=options)
推奨されるSelenium 4の記述に修正することで、警告が出力されなくなります。
webdriver_manager
ドライバのバージョンアップを行うためには、ブラウザのバージョンチェック及び、Downloadsから同じバージョンのChromeDriverのダウンロードが必要です。
自動化する場合は、自前で実装するか、既に存在するライブラリを使用するかの対応が必要です。
本記事ではwebdriver_managerというライブラリを使用することで、Seleniumで使用するドライバのバージョンアップを自動化しています。
webdriver_managerは、使用するWebブラウザのバージョンに合わせて最新のドライバをダウンロードします。
対応するブラウザはChromeだけでなく、Firefoxなどのブラウザにも対応しています。
使い方も簡単です。
まずはpipでwebdriver_managerをインストールします。
$ pip3 install webdriver-manager
最新のドライバはChromeDriverManager
クラスの.install()
で、ダウンロードできます。
以下はnew_driver
を最新のドライバとして設定する例です。
from webdriver_manager.chrome import ChromeDriverManager
new_driver = ChromeDriverManager().install()
service = ChromeService(executable_path=new_driver)
browser = webdriver.Chrome(service=service, options=options)
webdriver_managerはプログラム実行時に、ホームディレクトリ配下に.wdm/
という隠しディレクトリを作成し、最新のドライバはこの.wdm/
ディレクトリ配下に保存されます。保存するディレクトリはChromeDriverManager
のpath引数で指定できます。
動きとして同ディレクトリに生成されるdrivers.json
をメタデータとして参照し、ドライバのダウンロードが行われてるようです。
おわりに
課題に対するソリューションが既に存在する場合は、使わない手はありません。
webdriver_managerに感謝にします。