自分基準

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

Pythonでスクレイピング2(Selenium):UFJの残高取得

前回に引き続きPythonSeleniumを使ってスクレイピングを行ったのでそのメモ。 今回は三菱東京UFJ銀行のネットバンキングから残高を取得してみた。

ソースコード

とりあえず先に今回作ったソースコードを載せる。

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

#URL
MUFG_URL = 'https://entry11.bk.mufg.jp/ibg/dfw/APLIN/loginib/login?_TRANID=AA000_001'

# MUFG_ID&Pass
ID = "***"
PASSWORD = "***"

try:
    browser = webdriver.Chrome()
    browser.get(MUFG_URL)
    time.sleep(1.5)

    #ログイン
    browser.find_element_by_id('account_id').send_keys(ID)
    browser.find_element_by_id('ib_password').send_keys(PASSWORD)
    browser.find_element_by_class_name('admb_m').click()
    time.sleep(1)

    #口座残高取得
    s = browser.find_element_by_id("setAmountDisplay").text
    print(s)

finally:
    browser.quit()

1行目はutf-8の文字を使うという宣言をするためにある。
2行目はWebサイトにアクセスしてしばらく待つ作業が必要なのでそのための文
3行目は前回記載のSeleniumを使うための文

URLとID,Passを先に覚えさせておく

#URL
MUFG_URL = 'https://entry11.bk.mufg.jp/ibg/dfw/APLIN/loginib/login?_TRANID=AA000_001'

# MUFG_ID&Pass
ID = "***"
PASSWORD = "***"

この箇所は最初にURLとID,Passを後で使うために、変数に代入しておく箇所
IDとPASSWORDには自分のアカウントのを記載しておく。

実際にアクセス

ここから実際にURLにアクセスする。

1.webdriverのセット
    browser = webdriver.Chrome()
    browser.get(MUFJ_URL)
    time.sleep(1.5)

まず始めにwebdriverを使うのでbrowserに結びつける。
次にbrowserにドライバが結びつけられているのでそこから.getを使って先ほど覚えさせたMUFJ_URLにアクセスする。
その後time.sleep()を使って上の例では1.5秒待っている。

2.IDとPassWordを入力

webdriverはfind_element_by_xxxを使うことでHTMLから要素を探しだしてくれる。 抜き出せる要素は様々で赤文字のxxxを変えることでidやclass_nameやxpathなどから取得できるが今回はユーザIDとパスワードはidから探してみる。

実際に三菱東京UFJ銀行のサイトにアクセスをしてみてHTMLのソースコードを確認してみると以下のようになっている。

(略)...
<input type="text" name="KEIYAKU_NO" id="account_id" value="" maxlength="22" tabindex="1" autocomplete="off" onkeydown="submitOnEnter(event);">
(略)...

ログイン - 三菱UFJ銀行より

f:id:nisiki_satika:20160504201811p:plain

拡大
f:id:nisiki_satika:20160504214027p:plain

拡大2
f:id:nisiki_satika:20160504214032p:plain

上記の事からユーザIDの入力箇所のid要素はaccount_idということが分かるので以下のように探索する。

browser.find_element_by_id('account_id')

そして抜き出した要素に先ほど代入しておいたIDを挿入するために.send_keys(ID)を文の下につなげる。そうすることで入力欄にIDの中身が挿入される。

※また、別に予め変数に代入しておかなくても

browser.find_element_by_id('account_id').send_keys("自分のid")

でも良い。

パスワードも同じようにしてHTMLからidを探し出してみるとib_passwordなので抽出するコードは以下の通りになる。

browser.find_element_by_id('ib_password').send_keys(PASSWORD)
3.ログインボタンをクリック

ユーザIDとパスワードを入力したら次はログインボタンをクリックする。 というわけでHTMLソースコードを確認してみるのだが今度はid要素がなく以下のとおりになっている。

<p class="acenter admb_m">

f:id:nisiki_satika:20160504204244p:plain

拡大1
f:id:nisiki_satika:20160504214504p:plain

拡大2
f:id:nisiki_satika:20160504214523p:plain

上記の事からログインボタンのHTMLのclassはacenter admb_mの2つということが分かるので今回は後者のadmb_mを指定する。 class_nameから探索してするには以下のとおりである。

browser.find_element_by_class_name('admb_m').click()

そして今度は文字を挿入するのではなくボタンをクリックするのが目的なので後ろに.click()をつなげる。 するとログインボタンがクリックされユーザIDとパスワードが間違ってなければログインできる。

残高の確認

ログインに成功したら今度は残高を取得するのが目的なので残高が記載されている箇所をまたしても同じように探してみる。 f:id:nisiki_satika:20160504210133p:plain

これがログイン後の画面でこの矢印の部分に残高が記載されているのでここを取得できれば良い。 ちなみにソースコードは以下の様になっている。

f:id:nisiki_satika:20160504210720p:plain

<p id="setAmountDisplay">xxx,xxx<span></span></p>

上記の事から口座残高はid要素のsetAmountDisplayに記載されていることがわかる。

なのでこれをテキストとして変数に代入する。

 s = browser.find_element_by_id("setAmountDisplay").text

最後に口座残高を代入した変数を表示すれば画面に残高が表示される。

 print(s)

ブラウザを終了するときは前回記載のbrowser.quit()で終了すれば良い。

Pythonでスクレイピング(Selenium)

Seleniumを使ってPythonスクレイピングする方法を調べてみたので軽くまとめた。

スクレイピングを始める前に

Pythonスクレイピングをするには下記の2つが必要。

1.selenium

Webスクレイピングにはseleniumというものが必要でこれはブラウザを操作するものらしい。

Seleniumとは、Webブラウザを使ってWebアプリケーションをテストするツールです。この「Webブラウザを使って」というのが非常に大きなポイントで、人が手でWebブラウザを操作する代わりにSeleniumWebブラウザを操作してくれるのです。 そして単純に操作するだけでなく、例えばエラーメッセージが正しく表示されているかといった検証も行うことができます。つまり、今まで人手を必要としていたWebブラウザを使った試験が自動化できるものなのです。そのため数百項目もあるテストも、クリック1回で実施できます。

[ThinkIT] 第1回:Webブラウザを使ったテストツールSeleniumとは (1/3)より

2.ChromeDriver

seleniumWebブラウザを動かすものだがブラウザには複数種類があり、その中でGoogleChromeを動かすのであればchromedriverが必要となる。

以上の2つが必要である。

Seleniumのインストール

Pythonseleniumをインストールするにはコマンドプロンプト

pip install selenium

と入力すれば

C:\Users\xxx>pip install selenium
Collecting selenium
  Downloading selenium-2.53.2-py2.py3-none-any.whl (884kB)
    100% |################################| 890kB 1.5MB/s
Installing collected packages: selenium
Successfully installed selenium-2.53.2

と帰ってきてインストールが簡単にできる。

ChromeDriverのダウンロード

ここからダウンロードできる ChromeDriverのダウンロード
Downloads - ChromeDriver - WebDriver for Chrome

ここから自分のPCにあったものをダウンロードすれば良いのだがWindowsの64bit版はないみたいなので、とりあえず32bit版をダウンロード

Seleniumを使う

1.Seleniumのインポート

PythonSeleniumを使うにはコードに以下の文を書く必要がある

from slenium import webdriver

f:id:nisiki_satika:20160502222650p:plain

chromedriver.exepythonのコードと同じフォルダに置いておくけば特にコードの追加は必要ない。

2.chromeを起動

とりあえずchromeを動かすコードを記載

browser = webdriver.Chrome()

これで、chromeが新規に開く f:id:nisiki_satika:20160502223132p:plain

f:id:nisiki_satika:20160502223141p:plain

3.URLのページを開く

URLを開くには

browser.get("URL")

これでURLに記述したページが開く。画像ではGoogleのページを開いてみた f:id:nisiki_satika:20160502223341p:plain

f:id:nisiki_satika:20160502223351p:plain

4.ブラウザを閉じる

閉じるコードは

browser.quit()

でブラウザが終了するのでこのままPythonもexit()で抜ければ終わり

Pythonを始める

プログラミングに興味があると前に書いたのでプログラムに関する事を書こうと思う。

プログラムは学生だった時に少し触ったことがある程度で、その際もC言語Javaを本当に撫でたくらいでしかなく、前者はポインタで躓き後者は殆ど覚えていないのが現状である。

新しくプログラムを勉強するのであれば簡単かつ色々なことができ、さらに欲を言えば将来性があるものを…ということで「C」も「Java」もコンパイラ言語だったので、今回は反対にスクリプト言語の「Python」を勉強していくことにする。

なぜPythonなのか?

Pythonを選んだ理由として

1.スクリプト言語だから

上記にも書いたが新しくプログラムを勉強するのなら今までと違った方が新鮮味があるのでコンパイル言語は対象外とした(※Cはいずれ再独習する予定)

2.いろいろなところで使われているから

有名なところであればDorpBoxPythonで書かれているらしい。ほかにもYouTubeもというより、Googleは積極的にPythonを活用しているらしい。(まぁだからと言って覚えてもGoogleに入れる訳じゃないけれども…)

3.可読性が高い

Pythonは他の言語と違って異なる書き方があまりできないようになっているらしい。例えばPythonはインデント(字下げ)も定義されていて個人の好みがあまり出にくい。

つまり可読性が高く誰が書いても似たようなものになるので参考書や調べものをしても混乱がしにくいと思う。

以上3点からPythonを勉強してみようと思う。

Pythonのインストール

最初にインストーラを拾ってこなければいけない。PythonのHPに行けば落ちてるのでまずそこに行く。

PythonのHP→https://www.python.org/

※何故かノートPC で確認するとダウンロードが無いのでから直接リンクを掲載

https://www.python.org/downloads/windows/

続いて見れば分かるがDownLoadがあるので、カーソルを乗せWindowsをクリックする。

f:id:nisiki_satika:20160430211638p:plain

 するとWindows用のインストーラがあるページに飛ぶので、そこから自分が必要とするPythonのバージョンとWindowsのbitに合わせた方をダウンロードする。

f:id:nisiki_satika:20160430212236p:plain

 ちなみにバージョンが2.xxと3.xxは完全互換性ではないらしく参考にするものによっては2.xxを進めてくるものもあるが最近は3.xxでも問題ないらしいので自分は3.4.4の64bitの方を選択した。

※最新のバージョンをインストールしたら(原因不明で私だけかもしれないが)Pathも通せないかつ「pip」も使えないので最新のやめたほうがいいかもしれない

インストーラの実行

ダウンロードしたインストーラを実行しPythonを入れていくが基本はNext >クリックしていくだけだが、

f:id:nisiki_satika:20160430213538p:plain

f:id:nisiki_satika:20160430213639p:plain

3つ目のページで下の方に隠れているAdd Python.exe to PathWill be installed on laval hard driveに変更しておくとインストールと一緒にPathを通しておいてくれるらしい。

f:id:nisiki_satika:20160430214147p:plain

f:id:nisiki_satika:20160430214152p:plain

f:id:nisiki_satika:20160430214156p:plain

 最後にPCを再起動してコマンドプロンプトにpthonと入力して

f:id:nisiki_satika:20160430215418p:plain

のように表示されればインストール成功

>>>のあとにexit()と入力すればPythonを抜けコマンドプロンプトに戻る

はてなブロク設定メモ

備忘録としてはてなブロク上ではCSSが編集しにくいので、Dropboxに保存しローカルから編集できるようにしたのでその記録をまとめる。

参考にさせってもらったサイトは以下の3つである。

blog.nakajix.jp

  

moonnote.hateblo.jp

 もう一つは後ほど記入する。

 CSSDropboxにリンクする

最初に、Dropboxに何でもいいのでCSSファイルを投稿する。

f:id:nisiki_satika:20160402214200p:plain

続いてファイルの右側の[共有]をクリックしCSSのリンクを取得する。

f:id:nisiki_satika:20160402214852p:plain

[ファイルへのリンク]がCSSのURLだがこのリンクではDropbox上でファイルが開いてしまい、いくら編集してもCSSの設定が反映されない。

f:id:nisiki_satika:20160402215619p:plain

 

そこでこのサイトを参考にさせってもらった。(※リンク切れ)

ameblo.jp

 

CSSのリンクであるhttps://www.dropbox.com/s/gi1z4hpy34lm2m2/hatena.css?dl=0

www.dropbox.comを→dl.dropboxusercontent.comに変更し、最後の?dl=0をけした。

 すると直接ファイルが開けるようになる。

f:id:nisiki_satika:20160402215819p:plain

 

そしてこのリンクを[ダッシュボード]の[設定]→[詳細設定]→[検索エンジン最適化]の

[headに要素を追加]に<link rel="stylesheet" href="https://dl.dropboxusercontent.com/s/gi1z4hpy34lm2m2/hatena.css">

として貼る。

これでローカルでCSSを変更してもDropboxへ共有さえしておけばリアルタイムでCSSの設定を反映できるし、ソフトウエアなどで編集もしやすくなった。