【Pythonの勉強】馬券購入履歴取得プログラムの作成 その2

Pythonの勉強のために、馬券の購入履歴を取得するプログラムを製作中です。
【Pythonの勉強】馬券購入履歴取得プログラムの作成 その1

さて早速作ろうと思いましたが、その前にスクレイピングの基本を少し勉強しました。
環境構築のところで試行錯誤があったので、前回のブログに書いています。
Windows10にてPythonとSeleniumでHeadless Chromeを試してみる

さて、ようやく環境も整ってようやくウェブサイトから情報を取ってくることができるようになりました。
次の一歩は馬券の購入履歴があるページまでたどり着くことです。

今回は、PythonでSeleniumを使用して、Chromeのヘッドレスブラウザで以下の動きをさせていくところになります。

ログイン~購入履歴ページの表示まで

①Club JRA-Netのログインページを開く

②ID、パスワードを入力してログインし、マイページを開く

③投票照会のメニューを開く

④投票内容照会を選択して日付選択画面を開く

⑤日付を選択して受付番号選択画面を開く

⑥受付番号を選択して投票内容照会画面を開く

⑦レース、買い目、金額等の情報を取得する

①~④までは順番に実施していけばよいです。
⑤は存在する日付の分だけループさせ、その中でさらに⑥の受付番号の分だけループさせていき、順番に購入履歴を取得していきます。

初めてのスクレイピング

本を読みながら初めてスクレイピングをやりました。
完成版ではブラウザは表示させないつもりですが、今日は初めてなので動きが分かるようにブラウザを表示させながら動かします。

動かしていくうちに少しずつコツが分かってきました。

この調子で今日中にすべての購入履歴を取得できるところまで行ければ良かったのですが、そうすんなりはいきません。
いくつかハマりポイントがあって時間を取られてしまい、目標のところまではできませんでした。
結局今日は時間切れになってしまいましたが、なんとか投票照会画面までたどり着くことはできました。

後はループを回して購入履歴の情報を取得し、DBに保存するといったところでしょうか。

今日のハマりポイント

今日ハマったのは以下の2点です。

①ログイン画面でID、パスワードが入力できない

フォームにsend_keysでテキストを入力しようとしましたが、テキストが入力されません。
Webdriverのfind_element_by_nameを使ってIDとパスワードの入力エリアを取得するのですが、誤って複数要素を取得しようとしてしまいました。

誤:find_elements_by_name
正:find_element_by_name

find_elements_by_nameを使うと結果がlist型になってしまうため、send_keysでエラーになっていたのです。
これは単純なミスで、エラーの内容から比較的簡単に解決できました。

②ポップアップした画面をどうやって操作すればいいのか分からない

マイページで各種情報照会ボタンをクリックして投票照会のメニューを開くのですが、こいつがポップアップして別画面で開くようになっています。

初めはそのまま投票内容照会のボタンをクリックしようとしてしまったので、まんまとエラーになってしまいました。
元の画面を操作しようとしてエラーになったということはすぐに分かったのですが、どうすればポップアップした画面を操作できるのかが分かりません。

調べるのに結構時間を使ってしまいましたが、以下のサイトの情報を見つけました。
【Python】window_handles・・・複数のウインドウハンドルを取得する

driver.window_handlesで開いている画面のハンドルを取得した後、移行したい画面のウインドウハンドルをswitch_to_windowの引数に渡してやればいいのです。

これでポップアップした画面を操作できると思いましたが、なんとPycharmの画面上でswitch_to_windowに斜線が引かれています。
これは初めてのことでしたが、Pycharmがこのメソッドは使えないと警告を出しているのだと理解しました。
ここからまた少し調べたのですが、なかなかわかりません。

たまたまpycharmで警告が出ているところをマウスオーバーしたときに、ようやく何やらメッセージが表示されることに気づきます。

use driver.switch_to.window instead

switch_to_windowではなくswitch_to.windowを使ってね、ということですね。
最初から警告のメッセージを見ておけば良かったんです。
何かうまくいかないとすぐに調べることが癖になっているのですが、まずは素直に警告やエラーメッセージを見ることが大事ですね。

switch_to.windowに変えると斜線が消え、見事にポップアップした画面を操作することができました。

こうしてとりあえず投票照会画面までたどり着くことはできました。
やはりハマってしまうと時間をかなり使ってしまいます。

この感覚、久しぶりに経験しました。
仕事の場合はいかにこの時間を短くできるかが勝負だな。

次回に続きます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする