Seleniumを使用してログインが必要なウェブサイトを操作する際、find_element_by_関連のエラーが発生することがあります。
AttributeError: 'WebDriver' object has no attribute 'find_element_by_id'
このエラーの原因はseleniumのバージョンが4.3.0 以降でfind_element_by_の使用方法が変更されたためです
finf_element_by_name 4.3.0より前
find_element(By.ID, "xxx") 4.3.0以降
Byをimportして使用します
from selenium.webdriver.common.by import By
以下では、Selenium 4.3.0以降での解決策を紹介します。Google Colaboratoryでも動作します。
対応策
Seleniumのバージョンを下げる。これも解決策ですが、続いてSelenium 4.3.0以降での解決方法について説明します。
# Seleniumのバージョンを下げる
$ pip install selenium==4.0.0
selenium 4.3.0以降の解決方法
入力フォームなどの要素を確認して下さい。Google ColaboratoryでもWorkします。
# Selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import time
ID = "yourID"
password = "yourpassword"
#ログイン情報入力
id = driver.find_element(By.ID, "user_session_email")
id.send_keys(ID)
#パスワード入力
password_input = driver.find_element(By.ID, "user_session_password")
password_input.send_keys(password)
#ログイン、クリック
login = driver.find_element(By.CSS_SELECTOR, "input.fade.commit")
login.click()
find_element_by_の代わりにfind_element(By.ID, “xxx”)といった形式を使用することで、AttributeError: ‘WebDriver’ object has no attribute ‘find_element_by_id’などのエラーを回避できます。
関連記事
まとめ
Seleniumを使用する際に発生するAttributeError
は、バージョンによるメソッドの変更が原因です。Seleniumのバージョンを4.3.0より前に下げるか、最新バージョンに合わせたコードの修正を行うことで、このエラーを解決できます。最新の方法に慣れておくと、今後のメンテナンスが容易になるため、是非試してみてください。
コメント