n l o g ...

プログラミング、イラスト、Webデザインなど、駆け出し勉強記録。

【Python】Yahoo!路線情報のスクレイピングが突然動かなくなった話

1ヶ月前に作ったPythonのWebスクレイピングプログラムを動かしてみると、何故かエラーになってしまったので備忘録を残します。

プログラムの仕様

  • 1ヶ月分の交通費を自動で検索するプログラム
  • Yahoo!路線情報(https://transit.yahoo.co.jp/)にアクセスして、自動で出発駅・到着駅を入力
  • 検索ボタンをクリックし、検索結果を表示
  • 検索結果から、運賃を取得する
  • スクレイピングにはseleniumライブラリを使用

久しぶりに動かしてみるとエラーが出た

さて10月の交通費を検索しましょうかとプログラムを動かすとこんなエラーが。
1ヶ月前は普通に動いていたじゃない・・・・。

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="sto"]"}

id="sto"という要素はありません、と言っています。

エラーとなってしまったソースコードはこちら。

v_sto = v_browser.find_element_by_id("sto")

Yahoo!路線情報の検索画面で行き先を入力するテキストボックスのID属性を指定しています。
うーん。どうしてこんなところでエラーに・・・?

原因:Yahoo!路線情報のHTMLが書き換わっていた

↓よくよく調べてみると、行き先を入力するテキストボックスを表現するHTMLソースからID属性が消えていました。

<!––2021年11月4日時点のHTMLソースコード––>
<input type="text" name="to" value="" autoComplete="on"/>

↓1ヶ月前にプログラムを書いたときはこんなソースだったはず。

<!––2021年10月初旬のHTMLソースコード(記憶を含むため正確でない可能性あり)––>
<input id=“sto” name=“to” type=“text” value data-rapied_p=“4” autocomplete=“on”>

id="sto"が無くなってるーーーー!!!

原因はこれでした。代わりに、name="to"を参照するようにプログラムを修正して、解決。

#参照先の情報を修正
v_sto = v_browser.find_element_by_name('to')


Yahoo!路線情報をスクレイピングするプログラムを作っている人、結構いると思うのですが、参照先の名称が変わってしまうのはツラいですね。
こんなこともあるんだなぁと勉強になりました。