Python

セレニウムでfind_elementでdeprecated(非推奨)のメッセージが出る時の置き換えコード一覧

Pythonのセレニウムを使ってスクレイピングする際に、HTMLデータをクラス名を指定して取ろうとしたら以下のようなメッセージが出て処理が止まってしまった。またはログが大量発生なんてことがありました。(止まる時とそのまま実行できる時があるのが不思議)

find_element_by_class_name is deprecated. Please use find_element(by=By.CLASS_NAME, value=name) instead”)

どうやら以下のような書き方は最新のセレニウムのバージョンでは非推奨になってしまったようだ。

driver.find_element_by_class_name(“class-name”)

クラス以外も全て書き方を下記のように置き換える必要があるようです。

driver.find_element(By.CLASS_NAME, “class-name”)

By.大文字で書くルールに変わったようです。

わかったものの覚えてられる気もしないし、コード打ち込むのがだるいのでコピペ用に以下にまとめます。

find_element()書き方一覧

find_elements()は複数形のsを追加するだけで以下の置き換えコードとほぼ同じ書き方なので省略しています。

参考元

Upgrade to Selenium 4 | Selenium
find_element_by_* commands are deprecated in selenium Stack OverFlow

import文

find_element()を書き換える場合は以下のimport文も合わせて使います。

from selenium.webdriver.common.by import By

import文を忘れると以下のようなエラーがでます。

‘By’ is not defined selenium

クラス

今までの書き方

driver.find_element_by_class_name(“class-name”)

新しい書き方

driver.find_element(By.CLASS_NAME, “class-name”)

ID

今までの書き方

driver.find_element_by_id(“element_id”)

新しい書き方

driver.find_element(By.ID, “element_id”)

name属性

今までの書き方

driver.find_element_by_name(“element_name”)

新しい書き方

driver.find_element(By.NAME, “element_name”)

リンクテキスト

今までの書き方

driver.find_element_by_link_text(“element_link_text”)

新しい書き方

driver.find_element(By.LINK_TEXT, “element_link_text”)

パーシャルリンクテキスト

今までの書き方

driver.find_element_by_partial_link_text(“element_partial_link_text”)

新しい書き方

driver.find_element(By.PARTIAL_LINK_TEXT, “element_partial_link_text”)

タグ名

今までの書き方

driver.find_element_by_tag_name(“element_tag_name”)

新しい書き方

driver.find_element(By.TAG_NAME, “element_tag_name”)

CSSセレクタ

今までの書き方

driver.find_element_by_css_selector(“element_css_selector”)

新しい書き方

driver.find_element(By.CSS_SELECTOR, “element_css_selector”)

xpath

今までの書き方

driver.find_element_by_xpath(“element_xpath”)

新しい書き方

driver.find_element(By.XPATH, “element_xpath”)

おわり

慣れるまでは非推奨のメッセージをよく見かけることになりそうですね。

COMMENT

メールアドレスが公開されることはありません。