はじめに
以前、Selenium4の新機能をまとめましたが、使っている中でSelenium3 → Selenium4で書き方が変わったものが見つかったので残します。
ドライバの指定
ドライバのパスを指定する方法
Selenium3ではドライバ起動時に直接executable_path
を指定していましたが、Selenium4ではService
オブジェクトからexecutable_path
を渡します。または、システム環境変数にパスを通します。
# Selenium 3
from selenium import webdriver
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(executable_path="./drivers/chromedriver.exe", options=options)
# Selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
options = webdriver.ChromeOptions()
service = ChromeService(executable_path="./drivers/chromedriver.exe")
driver = webdriver.Chrome(service=service, options=options)
Selenium3の書き方でも実行できますが、以下のWarningが表示されます。
DeprecationWarning: executable_path has been deprecated, please pass in a Service object
参考:Upgrade to Selenium 4 | Selenium
webdriver-managerを使う方法
webdriver-managerは各ブラウザのバージョンを自動で確認して実行してくれるライブラリです。ブラウザのバージョンアップの度にドライバを用意するという手間が省けます。
これも同様にSelenium3 → Selenium4 で書き方が異なります。
pip install webdriver-manager
# Selenium 3
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
# Selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
モジュールの変更
Select
とWebDriverWait
を使うためのモジュールが変わっていました。もしかしたらSelenium3→Selenium4の変更点ではないかもしれません。
ソースコードを見ると、.ui
を使っても.select
と.wait
がそれぞれ呼び出されるようになっているので支障はなさそうです。
Select
# Selenium 4
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select # 以前はselenium.webdriver.support.ui
select_element = driver.find_element(By.ID,'selectElementID')
select_object = Select(select_element)
参考:Working with select list elements | Selenium
WebDriverWait
# Selenium 4
from selenium.webdriver.support.wait import WebDriverWait # 以前はselenium.webdriver.support.ui
WebDriverWait(driver, timeout=3).until(some_condition)