この記事ではwebdriverを管理するライブラリWebdriver Manager for Pythonrでwebdriverのバージョンを最新に保つ方法を試します。
はじめに
監視や自動テストなどで、seleniumを定常的に稼働させている場合を想定しています。 seleniumは各ブラウザベンダの提供するwebdriverを介してブラウザを操作しますが、そのwebdriverとブラウザのバージョンは適合していなければなりません。 しかしながら、ブラウザの自動アップデートによりバージョンがずれ、プログラムが動作しなくなるケースがあります。 具体的にはwebdriverとブラウザのバージョンが適合しない場合には[SessionNotCreatedException]が発生します。 そこで、webdriver_managerライブラリによるwebdriverのバージョン管理方法を試します。
環境
・Windows10 ・selenium ・chromedriver(80.0.3987.106) ・Google Chrome(80.0.3987.106) ・Python3(3.7.1)
Webdriver Manager for Pythonrについて
ライブラリ名:webdriver_manager
The main idea is to simplify management of binary drivers for different browsers.
対応ブラウザ(2020/2時点) ・ChromeDriver ・GeckoDriver ・IEDriver ・OperaDriver ソースを見た感じだと、Chromeのみブラウザのバージョンをチェックし対応するwebderiverを、それ以外のブラウザは最新のwebdriverを取得するようになっているようです。
サンプルコード
seleniumで指定URLを開くサンプルコードです。 3~7行目で、webdriverのバージョンが適当かチェックし、不適切な場合はダウンロードするようになっています。 driver_pathにwebdriver.exeのパスを入れ、webdriverを起動します。
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
# webdriver格納パスを指定する場合
custom_path = "/bin/webdriver/chrome/"
# webdriver.exeのパス
driver_path = ChromeDriverManager(path=custom_path).install()
driver = webdriver.Chrome(driver_path)
driver.get('https://www.yahoo.co.jp')
driver.quit()
上記のコードでは、webdriver起動ごとに最新のwebdriverのバージョンを取得する通信が生じるため、[SessionNotCreatedException]が発生したときのみwebdriver_managerで最新またはブラウザに応じたwebdriverを取得するような作りも良いかと思います。 webdriverは\drivers\chromedriver\80.0.3987.106\win32の形式で指定ディレクトリに作成され、chromedriver.zipとその解凍ファイルchromedriver.zipが格納されます。 なお、 ブラウザのバージョンに適合するwebdriverが存在しない場合はValueErrorが発生します。