プログラミング

【最新】Seleniumで「WebDriver object has no attribute」が急に出てきた【対策と解決】

スポンサーリンク

白黒つけようぜ!くまねこ(@kumanecoblog)です。

先日Seleniumを使用したら、どうやらアップデートが入っていたらしく、
今まで使えていたはずのコードが、急に「WebDriver object has no attribute」と
エラーが発生して使えなくなてしまいました。


今回はその時の原因とその解決法をお伝えします。

原因がこんな近いところにあったとは、といった感じです。
同じ原因で悩んでる人の役に立つと嬉しいです。

スポンサーリンク

該当ソースコード

from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

chrome_path = r"C:\chromedriver_win32\chromedriver.exe"
options = Options()
options.add_argument("--incognito")

service = Service(executable_path=chrome_path)
driver = webdriver.Chrome(service=service, options=options)

#一部省略してあります。

search_box = driver.find_element_by_class_name("SearchBox__searchInput")
search_box.send_keys(query)
search_box.submit()

sleep(3)

driver.quit()
スポンサーリンク

実際のエラー文

どうやら15行目が悪さをしているみたいです。

スポンサーリンク

予測:ケアレスミス

エラー文を読んだところ、
“WebDriver”は”find_element_by_css_selector”という属性を持っていません。
と書いてあります。
こういう時は、誤字脱字があったりすることが多いのですが、
今回に限って誤字も脱字もしていませんでした。

いつもは誤字ってるだけなのに、今日に限って・・・!
謎が深まる。

原因:公式が削除していた

「find_element_by_*」 と 「find_elements_by_*」は
バージョン4.3.0で公式が削除したみたいです。

下記のリンクからアップデートの内容が確認できます。

ちゃんと見ておけばよかった・・・

selenium/py/CHANGES at a4995e2c096239b42c373f26498a6c9bb4f2b3e7 · SeleniumHQ/selenium
A browser automation framework and ecosystem. Contribute to SeleniumHQ/selenium development by creating an account on GitHub.

使用しているSeleniumのバージョンを確認

Anaconda.NavigatorのEnvironmentsで確認しました。
「selenium」で検索したら、見事バージョンが4.6.0で4.3.0以降でした。

これが原因だとわかりました。

くまねこ君
くまねこ君

灯台下暗しだったりすることが、よくあるよ

対策

新しいバージョンに合わせて書く

seleniumのバージョン4.3.0以降は要素を指定する場合は下記のようにします。

#seleniumのバージョン4.3.0以降の書き方

from selenium.webdriver.common.by import By

# class指定
driver.find_elements(By.CLASS_NAME, "tag_name")

# タグ指定
driver.find_elements(By.TAG_NAME, "div")

なのでこのように直しました。

#search_box = driver.find_element_by_class_name("SearchBox__searchInput")

from selenium.webdriver.common.by import By
search_box = driver.find_element(By.CLASS_NAME, "SearchBox__searchInput")

4.3.0よりも前のバージョンを再インストールする

一応、4.3.0よりも前のバージョンを再インストールしてみたら、動きました。

pip install selenium==4.1.0

しかし、僕は上の新しいバージョンに合わせた書き方にしています。
理由としては、新しいものに慣れておきたいのと、
後々面倒なことになるかもなぁと思っているからです。

まとめ

灯台下暗し案件。
こういったバージョン違いで起きるエラーは今回に限らず、ちょいちょい発生します。
今後は、バージョンアップした時に、ちゃんと内容も読もうと決意しました。

めんどくさがりません。

この記事が同じ原因で悩んでいる人の役に立つと嬉しいな。

「これで解決したよ」や「バージョン変わった時に内容読まないことあるよね」
のような共感など、もしよければコメントやTwitterで教えてください。

この記事が少しでも役立ててもらえたらうれしいです。
今回も最後まで読んでいただき、本当にありがとうございました!

コメント

タイトルとURLをコピーしました