LoginSignup
7
7

More than 1 year has passed since last update.

Seleniumで使用するドライバのバージョンアップを自動化する

Posted at

はじめに

スクレイピングなど何らかの目的で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に感謝にします。

7
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7