この記事では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が発生します。