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()