自分基準

自分の思ったことを気ままにメモ代わりに書いていこうかと

Pythonでスクレイピング3(Selenium):クレジット(MUFG)カードの支払額の取得

今回もSeleniumを使ってスクレイピングをしてみたのでそのメモ。 対象はクレジットカードのMUFGカードの支払額を取得してみた。

 ソースコード

今回も先にソースを記載

# -*- coding:utf-8 -*-
import time
from selenium import webdriver

#UFJ CARD情報
ID = "***"
PASS = "***"
BIRTHDAY = '***'

#webdriverをセットしログイン
browser = webdriver.Chrome()
browser.get("https://www2.cr.mufg.jp/newsplus/?cardBrand=0011&lid=news_mufg")
time.sleep(1)

#IDとパスワードを入力
browser.find_element_by_name("webId").send_keys(ID)
browser.find_element_by_name("webPassword").send_keys(PASS)
browser.find_element_by_name("submit1").click()
time.sleep(5)

#誕生日のラジオボタンを選択し入力
browser.find_element_by_xpath("//*[@id='addAuthSelect2']").click()
browser.find_element_by_id("webBirthDay").send_keys(BIRTHDAY)
browser.find_element_by_id("submit").click()
time.sleep(5)

#請求額のリンクをクリック
browser.find_element_by_class_name("btnBg").click()
time.sleep(3)

#操作ブラウザを変更
browser.switch_to_window(browser.window_handles[1])
time.sleep(3)

#未確定分と確定分の支払金額取得
undecided = browser.find_element_by_xpath("//td[2]").text
decision = browser.find_element_by_xpath("//tbody/tr[2]/td[2]").text

#利用残高のページに移動
browser.find_element_by_id("menu11").click()
time.sleep(1)

#利用残高の取得
loan = browser.find_element_by_xpath('//div[@id="container"]/div[1]/div[5]/div[2]/table/tbody/tr[2]/td[1]').text
browser.quit()

#表示
print(u"未確定分:" + decision)
print(u" 確定分:" + undecided)
print(u"支払残高:" + loan)

最初のインポートやユーザIDなどの情報は前回と同じなので省略

 ラジオボタンの選択

ユーザIDとパスワードの入力だけではログインできず、誕生日か電話番号を選択、入力しなければならい f:id:nisiki_satika:20160509211108p:plain

そのため、まずはラジオボタンを選択するために要素をxpathから抜き出す。

 生年月日のラジオボタンのxpath

f:id:nisiki_satika:20160509212838p:plain HTMLソース↓ f:id:nisiki_satika:20160509212848p:plain

 生年月日のラジオボタンのxpath

f:id:nisiki_satika:20160509213125p:plain HTMLソース↓ f:id:nisiki_satika:20160509213134p:plain

上記から生年月日はaddAuthSelect2で電話番号がaddAuthSelect1ということが分かるのでコードは以下のどちらかになる。

#生年月日側
browser.find_element_by_xpath("//*[@id='addAuthSelect2']").click()

#電話番号側
 browser.find_element_by_xpath("//*[@id='addAuthSelect1']").click()

しかし何故上にある生年月日が2で下の電話番号が1なのだろうか?

ラジオボタンを選択したら続いて生年月日か電話番号を入力してクリックするわけだが自分は生年月日を選んでいるので上記のだが、電話番号ならば以下のようになる。

browser.find_element_by_id("webPhoneNum").send_keys(PhoneNum)
browser.find_element_by_id("submit").click()

 請求額のページヘ飛ぶ

ログインに成功したら右側のご請求額・利用明細紹介をクリックしページを飛ぶのだが、このリンクを押すと画面が変わらずに新しいタブで開く。 f:id:nisiki_satika:20160509215253p:plain

#請求額のリンクをクリック
browser.find_element_by_class_name("btnBg").click()
time.sleep(3)

そのためseleniumで操作するタブを変更する必要がある。そのコードが以下になる。

#操作ブラウザを変更
browser.switch_to_window(browser.window_handles[1])
time.sleep(3)

browser.switch_to_window(browser.window_handles[1])[]の数字で操作するタブを決める。 1番最初に操作していたタブが数字の0から始まるり、続いて1,2...と増えていく。

 確定分と未確定分の請求額を取得

タブを変更し画面から支払いの確定分と未確定分の金額を取得する。

#未確定分と確定分の支払金額取得
undecided = browser.find_element_by_xpath("//td[2]").text
decision = browser.find_element_by_xpath("//tbody/tr[2]/td[2]").text

その後は利用可能残高のページに飛び、こちらも残高を取得する。

#利用残高のページに移動
browser.find_element_by_id("menu11").click()
time.sleep(1)

#利用残高の取得
loan = browser.find_element_by_xpath('//div[@id="container"]/div[1]/div[5]/div[2]/table/tbody/tr[2]/td[1]').text
browser.quit()

その後いつものようにブラウザ終了する。

実行結果

f:id:nisiki_satika:20160509221435p:plain