Pythonで楽天Pを貯める【応用編】
※このシリーズはプログラミング中級者向けとなりますが、丁寧な解説を心がけて、初心者の方もわかりやすい内容になればと思います。
前回の記事はいかがでしたでしょうか。
実際のコードを用いて、各web操作の解説をいたしました。
一通り理解し、実行できれば毎日ポイントを自動で貯めることができます。
(楽天口座から楽天競馬へ振り込みで1P、スーパーVIPだとその3倍(3P))
図1 日々の楽天P貯金サイクル
1か月だと、3P × 30日 = 90P の獲得になり、年間1080Pの計算になります。
もし、このポイントがさらに8倍、9倍貯まるとしたら年 9000P も夢ではありません。
SPAT4
今回は、SPAT4に焦点を当てていきます。
では早速動作のイメージをつかんでいただきます。
※まずはコメントだけを読んで、流れを掴んでください
# ライブラリ
from selenium import webdriver
from selenium.webdriver.common.alert import Alert
import time
import pandas as pd
import os
import datetime
# 現在時刻取得
tm_now = datetime.datetime.now()
# 10以上21時未満のとき
if 10 <= tm_now.hour < 21:
# ブラウザ立ち上げ
browser = webdriver.Chrome(executable_path=u'C:\\Users\\■■■\\OneDrive\\デスクトップ\\chromedriver.exe')
browser.implicitly_wait(3)
# SPAT4 -------------------------------------------------------
# サイトアクセス
browser.get('https://www.spat4.jp/keiba/pc')
time.sleep(1)
# ログイン情報入力
textbox = browser.find_element_by_id("MEMBERNUMR")
textbox.send_keys("■■■■■■")
time.sleep(1)
textbox = browser.find_element_by_id("MEMBERIDR")
textbox.send_keys("******")
time.sleep(1)
# ログインボタン
btn = browser.find_element_by_xpath("/html/body/div/div[1]/form/a/span")
btn.click()
time.sleep(3)
# ②入金へ移動 -----
btn = browser.find_element_by_xpath("/html/body/form/div/div[3]/div/ul/li[4]/input")
btn.click()
time.sleep(3)
# ③入金情報入力 -----
browser.switch_to.window(browser.window_handles[-1]) # 新規windowに移動
textbox = browser.find_element_by_xpath("/html/body/div[3]/form/table/tbody/tr[1]/td/input ")
textbox.send_keys("100")
time.sleep(1)
## 確認ボタン
btn = browser.find_element_by_xpath("/html/body/div[3]/form/div/input")
btn.click()
time.sleep(3)
# ④入金情報入力2 -----
textbox = browser.find_element_by_id("MEMBERPASSR")
textbox.send_keys("****")
time.sleep(1)
## 確認ボタン
btn = browser.find_element_by_xpath("/html/body/div[3]/form/div[2]/input[1]")
btn.click()
time.sleep(3)
# ⑤タブ閉じる -----
browser.close()
time.sleep(1)
# ⑥ログアウト
browser.switch_to.window(browser.window_handles[-1]) # 新規windowに移動
btn = browser.find_element_by_xpath("/html/body/form/div/div[1]/div/p[2]/input")
btn.click()
time.sleep(3)
## OKを選択
Alert(browser).accept()
time.sleep(3)
# タブ閉じる -------------------------------------------------------
browser.close()
time.sleep(1)
# 入金時間外の時
else:
print("時間外です")
time.sleep(2)
コメントに書かれている通り、流れとしましては下記で大丈夫です。
ブラウザ立ち上げ → URLへ遷移 → ログイン情報入力
→ 入金へ遷移 → 入金情報入力 → タブ閉じる
→ ブラウザ閉じる → ログアウト
このコードにたどり着いたあなたはラッキーではないでしょうか。
だぶんお金とれるレベルだと思いますので。。。
余談でした、続けます。
3日もすれば、他人のコードとはよく言ったものですが
webに載っているコードなら尚更です。
「絵」がないとイメージつき辛いとは思います。
動画を載せておきますので、再度確認されたい方はご参照ください。
楽天競馬の動画になってしまいますが、流れは同じです。
※第一回から何度も登場する動画ですので、
見ていただかなくても大丈夫です。
※どの箇所を変更すれば正常に動くかは、次回答えを載せますが
できれば、第4回まで見てくださったあなたに見つけてほしいです。
タブ操作
前回との、技術の違いは「タブ操作」になります。
Google Chrome (selenium) の仕様として、新規にタブが開かれると
web操作が行えなくなってしまいます。
これはタブの内部番号(配列)で管理されているため、
新規にタブが開かれた場合、現在操作していたタブ(配列[0])と
アクティブタブ(配列[1])の乖離が起こってしまいエラーになります。
図2 アクティブタブの内部番号の変化
VBAでは、アクティブシートの概念がありますので
ご存知でしたらわかりやすいと思います。
先ほど載せましたコードですと下記に該当します。
配列を-1で指定することで、一番右を示すことができます。
# ③入金情報入力 -----
browser.switch_to.window(browser.window_handles[-1]) # 新規windowに移動
図3 アクティブタブの内部番号の関係
上下どちらの数字でも指定することができます。
逆から数えたほうが早いというのが面白いところですね。
ポップアップ操作
最後にポップアップ操作を説明して終わりたいと思います。
ログアウトをしようすると、ポップアップ操作が求められると思います。
これはブラウザのアラート機能でして、Alert 関数で操作します。
図4 ブラウザのポップアップ画面
## OKを選択
Alert(browser).accept()
キャンセルの場合は、.dismiss() メソッドになりますので
変更して試されてもいいかもしれません。
以上で、第4回は終了となります。
続きはこちら(第5回)をご覧ください。
サポートしてくださるお気持ちだけで嬉しいです。