2021年10月にSeleniumのバージョン4がリリース されました。
それに伴い、PythonのSeleniumモジュール もアップグレードされましたが、以前のコードのままだと以下のような非推奨機能に対する警告メッセージ(DeprecationWarning)が表示されるようになりました。そこで、今回はこの警告の回避方法を説明します。
なお、現在のSeleniumモジュールのソースコードでは、以前のコードのままでも正常に動作するように実装されているので、修正しなくても現時点では問題なくプログラムは動作します。
ただし、このDeprecationWarningは 廃止予定の機能であることを警告している ので、次期のバージョン5のリリースなどで予定通り廃止された場合は、そのバージョンでは修正しないと動作しなくなります。
DeprecationWarningが表示される以前のコード
以下のコードは、Chromeブラウザーを起動して、5秒間経過したら閉じるだけのプログラムですが、このようにドライバー(chromedriver.exe)がある場所は引数(executable_path
)で直接指定していました。
Selenium4でDeprecationWarningが表示されるコード
from selenium import webdriver
import time
# chromedriver.exeがある場所
driver_path = "driver/chromedriver.exe"
# webdriverの作成
driver = webdriver.Chrome(executable_path=driver_path)
# 5秒待つ
time.sleep(5)
# webdriverの終了(ブラウザを閉じる)
driver.quit()
しかし、Selenium4ではこのexecutable_path
で直接指定する方法が「非推奨(deprecated)」であると警告されるようになりました。
DeprecationWarningを回避するするための修正コード
上のコードだと表示されるDeprecationWarningを回避するには、公式のドキュメント でも説明されているようにServiceオブジェクトを介してexecutable_path
を指定します。
具体的には、コードを3箇所修正します。以下のように1)Serviceをインポートしておき、2)Service( )の引数でexecutable_pathを指定してから、3)webdriver.Chrome( )に渡します。これで、DeprecationWarningは表示されなくなります。
DeprecationWarningが表示されないように修正したコード
from selenium import webdriver
from selenium.webdriver.chrome.service import Service # 1) Serviceのインポート
import time
# chromedriver.exeがある場所
driver_path = "driver/chromedriver.exe"
# webdriverの作成
service = Service(executable_path=driver_path) # 2) executable_pathを指定
driver = webdriver.Chrome(service=service) # 3) serviceを渡す
# 5秒待つ
time.sleep(5)
# webdriverの終了(ブラウザを閉じる)
driver.quit()