Seleniumがバージョンアップしてfind_element_by_**の書き方が変わっていた件
こんにちは。
最近SeleniumでスクレイピングやWEB操作の自動化に再びハマっております。
ある日、こんな感じの自動化ツールを作ってみました。良かったら「いいね」押してくれると励みになります。
特定のサイトに対して、データを自動でアップロードしている動画です。
最近は副業でもWEB系の知見を高めつつあるので、いろんなことができるようになりました。
で、この動画中にも映っているのですが、こんなwarningが出ていることに気づきました。
「DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead」
さくっと原因と対策をみていきましょう!
原因:
Selenium3→4のバージョンアップによる仕様変更
warningの内容を読んでもわかりますが、書きっぷりが変わったので変えてねって警告文です。
対策:
ではどのように変わったのか、変更前後のソースコードをみてみましょう
【変更前】
driver.find_element_by_xpath('//a[@class="toggle"]')
【変更後】
driver.find_element(by=By.XPATH, value='//a[@class="toggle"]')
Seleniumのfind_element_by_**は色んな要素を指定できるのですが、xpath以外にcssやname, id等かなりの種類が存在します。
従来(Selenium3)まではそれぞれ使い分けて書くものでした。
新しい仕様(Selenium4)ではfind_elementまで共通で、引数のby=に指定方法を記述するタイプに変わったようです。
私個人としては、Selenium4の方が柔軟に変更かけやすくなったと感じますし、可読性的にも好きですね。
ここは好みの問題もあるかと思いますが、現在のSelenium4ではこのように変わったようなので、ユーザーは柔軟に合わせていきたいところですね!
今回はここまで!