「Seleniumを使うとDeprecationWarningが出てきてしまう」
「Selenium 4をインストールしたら、警告が出てくるようになった」
このような場合は、この記事が参考になります。
この記事では、Selenium 4で出てくるようになった警告を解決する方法を解説しています。
本記事の内容
- Selenium 4のリリース
- 「DeprecationWarning」とは?
- 「DeprecationWarning」の解決方法
それでは、上記に沿って解説していきます。
Selenium 4のリリース
2021年10月13日にSelenium 4が、リリースされました。
それまでは、Selenium 3.141.0が最新版の扱いでした。
Selenium 4は、約2年以上かけてα版が公開されてきました。
それが、ついにリリースされたということです。
Selenium 4では、大幅な機能追加が行われています。
そのため、Selenium 4は時間をかけて検証していく必要があります。
そして、Selenium 3との互換性が問題になるはずです。
すでに、過去のプログラムがSelenium 4では動かないケースを見つけました。
公式ページでは、それなりに互換性はあると記載されていましたけどね。
そのような場合は、Selenium 4用に書き直すことになります。
もしくは、Selenium 3を使い続けることになるでしょう。
基本的に、Seleniumは閉じた環境で利用していることが多いでしょう。
それであれば、Selenium 3でそのプログラムを動かし続けるのも一つの手です。
よって、そんなに焦ることはありません。
しかし、一つ気になる警告を見つけてしまいました。
次では、その警告を見ていきます。
「DeprecationWarning」とは?
気になる警告「DeprecationWarning」とは、次の警告です。
DeprecationWarning: executable_path has been deprecated, please pass in a Service object
警告であるため、プログラムが動かないことはありません。
でも、常時出てきてしまいます。
気になって仕方がないです。
警告にあるように、ドライバーの指定がどうも気に食わないようです。
非推奨と言っています。
ちなみに、次のコードで上記警告が出ます。
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys CHROMEDRIVER = "C:\data\etc\chromedriver.exe" # ドライバー指定でChromeブラウザを開く browser = webdriver.Chrome(CHROMEDRIVER) # Googleアクセス browser.get('https://www.google.com/') # 検索ボックスを特定 elem = browser.find_element(By.NAME, 'q') # 「Selenium」と入力して、「Enter」を押す elem.send_keys('Selenium' + Keys.RETURN) # ブラウザを閉じる #browser.quit()
なお、このコードは次の記事で紹介しているコードです。
もちろん、Seleniumのバージョンは3.141.0になります。
機能はしますが、Selenium 4であれば警告が出る状況です。
次では、この警告を解決する方法を説明します。
「DeprecationWarning」の解決方法
まずは、警告が出ないコードを載せておきます。
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome import service as fs CHROMEDRIVER = "C:\data\etc\chromedriver.exe" # ドライバー指定でChromeブラウザを開く chrome_service = fs.Service(executable_path=CHROMEDRIVER) browser = webdriver.Chrome(service=chrome_service) # Googleアクセス browser.get('https://www.google.com/') # 検索ボックスを特定 elem = browser.find_element(By.NAME, 'q') # 「Selenium」と入力して、「Enter」を押す elem.send_keys('Selenium' + Keys.RETURN) # ブラウザを閉じる # browser.quit()
修正ポイントは、Serviceオブジェクトの利用です。
ドライバーのパスを読み込む場合は、Serviceオブジェクトの利用が推奨されています。
ドライバーにPATHを通していれば、そもそもこの警告は出ることはなかったのでしょう。
でも、ドライバーにPATHを通すのは個人的には避けたい運用です。
PATHを通す必要がないモノは、できる限りで指定する方がトラブルが起こりません。
PATHに依存すると、環境が変わったら動かないコードになりがちです。
そのため、Serviceオブジェクトを利用する方向で修正します。
その修正は、以下。
# ドライバー指定でChromeブラウザを開く browser = webdriver.Chrome(CHROMEDRIVER)
↓↓↓
from selenium.webdriver.chrome import service as fs # ドライバー指定でChromeブラウザを開く chrome_service = fs.Service(executable_path=CHROMEDRIVER) browser = webdriver.Chrome(service=chrome_service)
この修正により、「DeprecationWarning」が出なくなりました。
メデタシメデタシ。
以上、Selenium 4で「DeprecationWarning」が出る場合の対策を説明しました。