Seleniumで今まではfind_elemeted_by_idのように使用していましたが、下記のような警告文が出るようになりました。(2022/2月)
DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
このまま使用はできるのですが、赤文字で表示されると気になりますよね笑
原因と対処方法を説明していきます。
警告文の意味
DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
和訳:非推奨の警告
find_element_by_* コマンドは非推奨です。代わりに find_element() を使ってください。
とのことですので、find_elementメソッドを使用すれば警告は起きないです。
find_element(), find_elements()の使い方
find_element()
element = driver.find_element(by="id", value="title")
print(element.text)
値を一つ取得したい場合には上記の方法を用います。
戻り値はインスタンスオブジェクトで帰ってきますので、インスタンス変数のtextを指定することで、内容が確認できます。
find_elements()
elements = driver.find_elements(by="id", value="title")
for element in elements:
print(element.text)
値を複数取得したい場合は上記の方法を用います。
戻り値はリスト形式で帰ってきます。リストの中に入っているのはインスタンスオブジェクトですので、find_element()と同じくインスタンス変数textを指定することで値を取得することができます。
引数について
引数については2つあります。
・by:抽出したいエレメントを文字列で指定する。(デフォルト:”id”)
・value:抽出したい文字列を指定する(デフォルト:None)
引数:byについて
byの引数については非推奨メソッドのbyの後の文字をアンダーバー(_)をスペースに変換して渡せばOKです。
下記にリストにしておきましたので、参考にしていただければと思います。
非推奨のメソッド名 | byの引数 |
---|---|
find_element_by_id() | “id” |
find_element_by_class_name() | “class name” |
find_element_by_css_selector() | “css selector” |
find_element_by_name() | “name” |
find_element_by_link_text() | “link text” |
find_element_by_partial_link_text() | “partial link text” |
find_element_by_tag_name() | “tag name” |
find_element_by_xpath() | “by_xpath” |
引数:valueについて
valueの引数は非推奨のメソッドの引数をそのまま渡せばOKです。
まとめ
非推奨とfind_element()を比較したのか下記のコードです。
# byの値(文字数)が少ない場合
driver.find_element_by_id("title")
driver.find_element(by="id", value="title")
driver.find_element("id","title")
# byの値(文字数)が多い場合
driver.find_element_by_css_selector("title")
driver.find_element(by="css selector", value="title")
driver.find_element("css_selector", "title")
ぶっちゃけあんまり変わってないような気がしますね笑
メソッド名が短くなって見やすくなり、可読性が高くなったような気がしないでもない・・・のか?笑
コメント