遅れ先立つほどへずもがな

  きらきら輝き覚えた 君を見上げるように

Selenium .find_element(s)_by_の仕様変更

必要があって定期的に気象庁のページからPython+Seleniumで日射量のデータをダウンロードしています。対象は26箇所分ですので手動でやると1時間近くかかってしまいます。面倒なのでこの作業を自動化しています。処理自体はサイトが混んでいないときであれば短時間で実行可能なのですが、気象庁のサイトに負荷がかかりすぎるといけないので、コマンドの一つ一つにwaitを入れており自動化とは言っても結構時間はかかるものの、基本的に放っておけばダウンロードが完了しているので大変便利です。
先日いつもと同じように処理を開始すると、どうやらcss_selectorで対象を指定するところあたりでエラーが出ました。サイトのcss_selectorは変更されることもあるのでChromeの開発者機能から確かめてみたところ、どうも変更はないようでした。仕方がないのでググってみると昨年から既に私のやり方はdeplicated(非推奨)になっていました。Seleniumのバージョンをアップしていなかったため使えていただけのようでしたが、先日conda環境をアップデートしたときにSeleniumもアップデートされ、非対応のバージョン4になった関係でエラーが出たということがわかりました。
Seleniumによるウェブスクレイピングググると古い情報がたくさんヒットしますので、それを参考にしてもし同じような状況になった場合は表現を変更する必要があります。変更点はimportと.find_element_by_css_selector()の部分で具体的には、

from selenium import webdriver # 同じ
from selenium.webdriver.common.by import By # これを追加
# 旧の書き方[selector]は対象ブツ。クリックする場合
# driver.find_element_by_css_selector("[selector]").click()
# 新しい書き方
driver.find_element(By.CSS_SELECTOR,"[selector]").click()

とすればよいようです。他のメソッドの場合も同様です。ご参考まで。

(2,653)