技術は使ってなんぼ

自分が得たものを誰かの役に立てたい

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ではこのように変わったようなので、ユーザーは柔軟に合わせていきたいところですね!

今回はここまで!