見出し画像

Pythonで楽天Pを貯める【プログラミング編】

第3回となります。(第1回目はこちら、第2回目はこちら)

※このシリーズはプログラミング中級者向けとなりますが、丁寧な解説を心がけて、初心者の方もわかりやすい内容になればと思います。

・実行の仕方

前回でも軽く触れましたが、実行の仕方からやっていきます。

Pythonの実行方法は、いくつか存在しますが、基本の2つを紹介します。
 1. コマンドプロンプトからファイル(.py)を指定して実行
 2. ファイル(.py)をダブルクリックして実行

1. こちらはデバックに優れています。
このデバックが嫌いじゃないかどうかで、プログラミングに向いているかどうかがわかるくらい、デバックは重要な作業になります。

試しに下記Pythonコードをを実行してみましょう。
下記コードを「test.py」として保存し、実行します。

print 'Hello World!'

Python実行4

図1 test.pyの実行例

エラーメッセージが表示されますね。
すみません、わざとです。。。

画像2

図2 エラーメッセージ

File "C:\Users\■■■\OneDrive\デスクトップ\test.py", line 2
となりますので、2行目がエラー個所となります。

つづけて、2. の方法で実行してみましょう。

2. こちらは利便性に優れています。
「test.py」をダブルクリックしてみてください。
コマンドプロンプトが一瞬表示され、何も起こらなかったと思います。

重要なのは、エラーメッセージも表示されない点です。
実行がしやすい分、デバックには向きません。

デバック段階ではコマンドプロンプトで実行、
完成して日々の仕事で動かすときはダブルクリックで実行、と使い分けると
それぞれのメリットを生かせると思います。


余談ですが、print 'Hello World!'は、Python 2.Xの記述方法で
3.Xは、下記になります。

print('Hello World!')


また、batでPython実行の方法もありますが、
2言語開発はハードルが高くなってしまいますので、おすすめはしません。

画像3

@echo off
:文字コードをutf-8にする
chcp 65001

C:\Users\■■■\OneDrive\デスクトップ\test.py

:待機
pause


ここからはサクサク説明しますが、項目ごとに「記述追加 + 実行」をしていただくと、より理解が深まると思います。
下記の実行イメージにつきましては、こちら(youtube)をご参照ください。


・必要なライブラリをインポート

# ライブラリ
from selenium import webdriver
from selenium.webdriver.common.alert import Alert
import time
import pandas as pd
import os
import datetime

from XX import YYは、seleniumを取得し、その中にあるwebdriverを使用します、と宣言しています。
import ZZ as AAは、pandasを取得し、psの名前で使用しますの宣言です。


・ ブラウザ立ち上げ

# ブラウザ立ち上げ
browser = webdriver.Chrome(executable_path=u'C:\\Users\\■■■\\OneDrive\\デスクトップ\\chromedriver.exe')
browser.implicitly_wait(3)

webdriverを使用して、Chromeを立ち上げます。
executable_path=u''の''内には、前回保存した場所を指定してください。

ブラウザ立ち上がるまでの許容時間を3秒としています。
browser.BB で機能を利用しています。


・楽天競馬へアクセス

# 楽天競馬
browser.get('https://my.keiba.rakuten.co.jp/')
time.sleep(1)

browser.get('URL')で、遷移しています。
先ほどのtimeを利用して1秒待機しています。


・ログイン情報入力

# ログイン情報入力
textbox = browser.find_element_by_id("loginInner_u")
textbox.send_keys("■■■@gmail.com")
time.sleep(1)

textbox = browser.find_element_by_id("loginInner_p")
textbox.send_keys("***")
time.sleep(1)

.find_element_by_id("loginInner_u")で、id(ユーザ名をどこに入れればいいのか)を探しています。
探した情報はtextbox変数に格納しています。

.send_keys("■■■@gmail.com")で、ユーザ名(文字列)を送っています。
キーボード入力の自動化です。
.send_keys("***")も同様です。
ご自身の情報を当てはめてください。


・ログインボタンを押下

# ログインボタン
btn = browser.find_element_by_xpath("/html/body/div[2]/div/div/div[1]/div/form/div/p[1]/input")
btn.click()
time.sleep(3)

.find_element_by_xpath("/html/body/div[2]/div/div/div[1]/div/form/div/p[1]/input")で、xpath(ログインボタンが何処か)を取得しています。
探した情報はbtn変数に格納しています。

.click()で、マウスクリック入力をしています。

ここでトップページに移動できたと思います。

楽天競馬

図3 楽天競馬トップページ


・入金へ移動

# 入金へ移動
btn = browser.find_element_by_class_name("balancedisplay_list_label")
btn.click()
time.sleep(3)

.find_element_by_class_name("balancedisplay_list_label")で、class_name(クラスネーム)を探しています。


・入金情報入力

# 入金情報入力
browser.switch_to.window(browser.window_handles[-1]) # 最後のtabに移動
textbox = browser.find_element_by_class_name("definedNumber ")
textbox.send_keys("100")

# 確認ボタン
btn = browser.find_element_by_id("depositingInputButton")
btn.click()
time.sleep(3)

.switch_to.window(browser.window_handles[-1])で、最後のタブに移動します。
タブを新規に開いたときは、このアクティブタブを変更しないと、正常に動作しません。

このタブには[0]や[1]のように、ナンバリング(配列として扱う)がされており、自由に変更ができます。
[-1]は、常に最後のタブとして指定できるので便利です。


・暗証番号入力

# 暗証番号入力
textbox = browser.find_element_by_name("pin")
textbox.send_keys("****")
time.sleep(1)

# 確認ボタン
btn = browser.find_element_by_id("depositingConfirmButton")
btn.click()
time.sleep(3)

もうここまで来ましたら、学んだことの繰り返しです。
.send_keys("****")には、ご自身の情報を当てはめてください。


・タブを閉じる

# タブ閉じる
browser.close()
time.sleep(1)

.close()で、タブを閉じます。
楽天競馬にはログアウト方法は見当たりませんでしたので、そのまま閉じます。
(ログアウト方法がありましたらコメントしていただけると幸いです。)


・if文

# 現在時刻取得
tm_now = datetime.datetime.now()

# 10以上21時未満のとき
if 10 <= tm_now.hour < 21:
    上記コードをすべて記述


# 入金時間外の時
else:
    print("時間外です")
    time.sleep(2)

Pythonのif文は、インデント(段落)でひとまとまりとして認識します。
「End if」や「fi」を必要としません。

tm_now.hourで、現在の時刻の「時」を参照し、
10時以上21時未満だと、上記コードをすべて記述を実行します。
(今回紹介したコードを書いてください。。。)

それ以外だと、print("時間外です")を実行します。

楽天競馬は、入金時間が決まっているので、誤って時間外にアクセスしないように制御しています。




以上になります。
続きはこちら(第4回)をご覧ください。

サポートしてくださるお気持ちだけで嬉しいです。