投資の成果を確認するため、定期的な記録は非常に重要で、
- 資産運用の成果を客観的に振り返り、今後の投資方針の検討材料にする
- リバランスのタイミングを見極め、効率的な資産形成を行う
- ブログのネタにする(笑)
特に客観的な振り返りは、投資を継続するという観点からも大切です。
コロナ禍で資産が大きく下落時したと思います。
「このような状況で資産がどれだけ減るか?」ということを確認するのは、自分のリスク許容度に応じた運用をするためにも重要です。
しかし、定期的に記録と言っても…
毎日は大変だし、毎週も大変。毎月はまだ良いケド、忘れそう。
そんな時こそ定型的な仕事はPCに任せてしまいましょう。
ということで、ネット証券にログインしてデータを取得するという一連の作業をGoogle Apps Script(GAS)を使用して自動化に成功。
しかし、GASではSBI証券の外貨建口座や楽天証券の情報は自動取得できませんでした。
そこで、pythonで再びチャレンジをして見事に自動でデータを取得することができましたので、備考記録と情報の共有を兼ねてご紹介します。
私はMacユーザーなのでMacでの環境構築をまとめましたので、こちらも参考にしてください。
python(パイソン)でSBI証券にログインするコード
まずは結論から。
# coding: utf-8
#--------------------------------------------------------------------------------------------------
#SBI証券にアクセスしてログインする
#--------------------------------------------------------------------------------------------------
from selenium import webdriver#seleniumをインポート
#----------------------------------------------------------
#seleniumの設定
#----------------------------------------------------------
driver = webdriver.Chrome('./chromedriver')#chromeドライバーを指定
driver.implicitly_wait(10)#待機時間10秒
#----------------------------------------------------------
#seleniumでSBI証券にアクセス
#----------------------------------------------------------
driver.get('<https://www.sbisec.co.jp/ETGate>')#SBI証券のログイン画面にアクセス
#ユーザーネーム、パスワード入力用テキストボックを取得
loginid = driver.find_element_by_name('user_id')#ユーザーネーム入力欄
passwd = driver.find_element_by_name('user_password')#パスワード入力欄
#ユーザーネーム、パスワード入力
loginid.send_keys('ユーザーネーム')#ユーザーネームは実際のユーザーネームを入力
passwd.send_keys('パスワード')#パスワードは実際のパスワードを入力
#ログイン
Log_in = driver.find_element_by_name('ACT_login')#ログインボタンを取得
Log_in.click()#ログインボタンクリック
#----------------------------------------------------------
#seleniumを閉じる
#----------------------------------------------------------
driver.close()
詳しく説明していきます。
selenium(セレニウム)の準備
具体的なコードを確認する前に、まずはpythonでWebブラウザを操作するライブラリであるseleniumの準備をします。
seleniumはWebブラウザを人の手を介することなく操作するためのライブラリです。
上記コードは、seleniumでChromeを操作しSBI証券のログイン画面からユーザーネームとパスワードを入力してログインしています。
seleniumはインストールが必要なライブラリですので、seleniumをインストールしてpythonで使用できるようにしましょう。
Windowsはコマンドプロンプトで、
pip install selenium
Macはターミナルで、
pip3 install selenium
上記コマンドでインストールできます。
次に、seleniumで操作するWebブラウザのドライバーを入手してください。
ここではGoogleのChromeを使用して説明します。
最初にChromeのバージョンを以下の画像のように「GoogleChromeについて」から確認してください。
「GoogleChromeについて」をクリックすると以下のような画面になります。
中段にChromeのバージョンの記載があり、私の環境ではバージョンは83.0.4.103.116でした。
次に、以下のGoogleのサイトからchromeのドライバーをダウンロードします。
英語で以下のようにバージョン83なら83.0.4103.39と記載されているので、
Current Releases
If you are using Chrome version 84, please download ChromeDriver 84.0.4147.30 If you are using Chrome version 83, please download ChromeDriver 83.0.4103.39 If you are using Chrome version 81, please download ChromeDriver 81.0.4044.138
私の環境では83.0.4103.39のmacダウンロードします。
自分のOSのドライバーをダウンロードしてください。
ダウンロード後にzipファイルを解凍してこれから作成するプログラムファイルと同じフォルダへ入れて下さい。
私の場合は、デスクトップに「python」というフォルダを作成して、そこでプログラムを作成するのでデスクトップの上のpythonフォルダへ入れました。
ここまで出来れば準備完了。
あとは、pythonのコードを書いていきましょう。
seleniumのインポートと設定
from selenium import webdriver#seleniumをインポート
driver = webdriver.Chrome('./chromedriver')#chromeドライバーを指定
driver.implicitly_wait(10)#待機時間10秒
一番最初にseleniumのwebdriverをインポート。
今回使用するブラウザはChromeなので、先ほどダウンロードしたドライバーとともに上記のように指定してください。
ちなみに、Chrome以外のブラウザは以下のように設定するようです。(試していないのでエラーになるかもしれませんが)
driver = webdriver.Firefox('Firefoxのドライバー')#Firefox
driver = webdriver.Edge('Edgeのドライバー')#Edge
つぎに、ブラウザの待機時間を設定します。
待機時間を設定しないと、ブラウザの画面描画が完了するまえに次の処理へすすみ、エラーになってしまいます。
今回は10秒にしてますが、適当に調整してください。
SBI証券にログイン
driver.get('<https://www.sbisec.co.jp/ETGate>')#SBI証券のログイン画面にアクセス
driver.get('URL')はChromeでURLのページへのアクセスをしています。
上記コードでは、SBI証券のログイン画面を表示します。
実際にプログラムを動かすと以下の画像のように
「Chromeは自動テストソフトウェアによって制御されています。」と表示されプログラムで制御されているのがわかります。
次にユーザーネームとパスワードの入力です。
以下のコードではseleniumにユーザーネームとパスワードの入力欄を教えてあげています。
#ユーザーネーム、パスワード入力用テキストボックを取得
loginid = driver.find_element_by_name('user_id')#ユーザーネーム入力欄
passwd = driver.find_element_by_name('user_password')#パスワード入力欄
入力欄を指定するにはいくつか方法がありますが、今回はfind_element_by_name('入力欄の名前')を使用しました。
タグのname属性から入力欄を特定するものなので、name属性を確認するためにログイン画面のソースコードの解析が必要です。
しかし、Chromeを使用すると非常に簡単。
ログイン画面で右クリックから検証を選択してください。
すると、右半分にログイン画面のソースコードが表示されます。
ソースコード上の矢印をクリックして、ユーザーネームの入力欄をクリック
すると、次の画面のようにユーザーネームの部分のソースコードがわかります。
これをよく見ると、「name="user_id"」という指定があります。
同じ要領でパスワードの入力欄を確認すると「user_password」とわかります。
このように、SBI証券のログイン画面ではname属性の指定がありましたのでby_nameを使用しました。
by_name以外の代表例が次の通りです。
find_element_by_id find_element_by_xpath
id属性が指定されていればby_idを使用しid属性もname属性もければby_xpathを使用するのがいいでしょう。
xpathの確認もChromeを使用すれば簡単です。
タグのソースコード上で右クリックから「Copy XPath」を選択すれば簡単にxpathが取得できます。
続いて、入力欄にユーザーネームとパスワードを入力しているのが以下の部分。
#ユーザーネーム、パスワード入力
loginid.send_keys('ユーザーネーム')#ユーザーネームは実際のユーザーネームを入力
passwd.send_keys('パスワード')#パスワードは実際のパスワードを入力
#ログイン
Log_in = driver.find_element_by_name('ACT_login')#ログインボタンを取得
Log_in.click()#ログインボタンクリック
最後にログインボタンをname属性で取得しログインボタンをクリックしてログイン完了です。
#ログイン
Log_in = driver.find_element_by_name('ACT_login')#ログインボタンを取得
Log_in.click()#ログインボタンクリック
最後に
python+seleniumを使えはネット証券へのログインが可能になります。
このプログラムを自動で定期的に動かせば、定期的に資産の評価額と評価損益を取得することが可能です。
プログラミングはPCに対して指示をする時に使う言葉(言語)ですので、最初はとっつきにくいかもしれません。
しかし、習得できれば単純作業をすべてPCに任せることができるので、個人の処理能力が飛躍的に向上します。
少子高齢化に伴う就労人口の減少で自動化は必須になりますので、ますますプログラミングの需要は増えるのではないでしょうか。
この機会にプログラミングをはじめませんか。
おすすめ書籍
証券口座にログインしたあとに必要なデータの取得方法や加工の方法など、pythonでのWebスクレイピングの基本が学べます。
無料のオープン講座もあり、講義&実習スタイルでPythonの初歩を学べます。
転職やキャリアアップ、フリーランスを本気で考えている方向けのプログラミングスクールです。
転職などのサポートも充実しているため、未経験からIT業界へ転職を求めている方へおすすめです!
techmeetsはプロのエンジニアになることを支援するオールジャンルカバー型エンジニアスクールです
GEEK JOBは、「学びかた」を改革し、自ら学び自らサービスを創り出す人を増やすをミッションにプログラミング学習や転職・就職支援、エンジニアの育成を行なっています。
ネット証券はSBI証券をススメします。
コメント