Python とVBAの相性や如何に・・

パソコン

※:パソコンのプログラミングについて興味のない方は「何言ってんだ、おっさん?」ってなる内容なので無視したほうが良いスレッドです。

Pythonを使いたいと思った成り行き

おっさんは最近(2024年現在)ちょっと投資なるものも始めてみた。
証券会社は楽天証券とSBI証券の二刀流。
幾つかの個別株や投資信託を買ってるが、それぞれの証券会社にログインし、画面を確認するのが面倒だ。
特にSBI証券は国内株と外国株で画面の作りが違うし、外国株はCSVデータとして集計されていない。
一律で見ることができない。
楽天証券は画面に統一性があるが、SBI証券と楽天証券を纏めてみることはできない。
あ~面倒だ・・・
こんなことを考えている時に現れたのが、Pythonと言う開発環境だ。

「SBI証券」と「楽天証券」結局どっちがいい?
「SBI証券」と「楽天証券」を使っているおっさんですが、なんで証券会社を2つも使っているかというと・・・それは、リスク分散の為と言うとカッコいいですが、真実は「SBI証券」が不甲斐ないので「楽天証券」と併用しているって感じです。がんばれ「SBI証券」!
VBAの代わりになるか?初めて python を使ってみる
必要に迫られてVBAだけでなく、新たな開発環境を模索中にPythonに出会って、お試しすることになった。おっさんの自動化生活の一助となるのかはこうご期待!

Pythonのインストールは完了

まずはPython をインストールし、ちょっと動かしてみた。
プラグインを入れて、Web画面を操作できるようにしてみた。
「お~、自動でWeb画面を表示できる。」
「お~、ログインもできるじゃん。」
「すげー、自動でWeb画面操作出来る~」
PythonでWeb画面を自動で操作できることを知ってご満悦のおっさんです。
なるほど、なるほど、ここまでは出来るのね。
それでは改めて、実装したいプログラムの概要を纏めてみよう。

おっさんがやりたい事

おっさんの要望としてはこんな感じ。

  • 定期的に楽天証券・SBI証券にログインし、現在の株価と預金残高を取得したい。
  • 取得した株価・預金残高を履歴で保存しているエクセルファイルに転記したい。
  • 転記した結果を表示し、コーヒーを飲みながら、結果だけを確認するようにしたい。

とまあ、こんな感じの要望があるわけだ。

例えば、こんなことできるかな・・

例えば、楽天証券の画面にログインし、持ち株の一覧画面まで移動する。
一覧画面の金額を取得して、エクセルファイルに転記って出来るかしら・・?
と思って、おっさんが作ってみました。
おー、出来るじゃん。

こんな感じにDOS画面でPythonを起動してみる。

すると、楽天証券のログイン画面が現れて、ログイン⇒画面遷移⇒日々のCSVデータ取得と自動でできるようになった。
このCSVデータをこれまで使っていたエクセルファイルに転記しようと思ったけど、保存したエクセルファイルのマクロが消えちゃった・・・
エクセル形式のファイルがCSV形式として保存されてる?
マクロ入りのエクセル形式での保存はできない感じ?
あ~、わからん・・・調べるのも面倒だ。
なので、証券会社から取得するデータを一旦CSVファイル形式で保存し
そのファイルをエクセルVBAで読み込む2段構えにしようと思う。
これでPython側では要望の①はできる感じになった。
②・③のエクセルへの転記と確認についてはエクセルVBAの方で対応しよう。

PythonでWeb画面を操作するには微調整が必要

なんとか、Web画面の操作をすることはできるようになったが、たまに画面が止まって処理が続かない。
原因はどうも、表示したWeb画面内に次の動作に必要なボタンが表示されていないと、Web上で動作しないことがあるようだ。
なので、画面が表示されたら、次にする動作が出来るように画面をスクロールさせたりアナログな処理を追加することで対応した。
やっつけ対応っぽいが、本当のPythonで開発する時はどうやるんだろう・・・
まあ、仕事じゃないし、深追いは辞めとこう。
(※:以下に修正時に必要になる情報をおっさん用にメモしとく。)

技術メモ:Web画面上のオブジェクトの情報取得について

画面上のボタンと言ったオブジェクトの情報を調べる方法をメモっとく。

  • ①Google Chrome を立ち上げ、対象のWeb画面を表示する。
  • ②「F12」キーを押す。
  • ③表示出来たら、赤枠のボタンを押す。
  • ④対象のオブジェクトにカーソルを合わせる。(※下記の場合はログイン用のID登録ボックス)
  • ⑤オブジェクト情報を確認できる。

技術メモ:find_element

Web画面上のボタン操作を行えるオブジェクト。

技術メモ:execute_script

画面スクロール何かを行えるオブジェクト。

まとめ

Pythonとエクセルの相性はあんまり良くない感じ。
でも、Web画面の手動操作を再現するのはPythonで行ける感じ。
と言う訳で、用途によってPythonとVBAを使い分けることで対応しよう。
ただ、実際に業務で使っている技術者からすれば「わかってねーな、このおっさんは・・」ってことかも知れんが・・・

追記 2024/01/28

これまで動いていた実行環境が動かんくなった・・・
よくよく調べるとChromeとPythonのバージョン不一致らしい。
そこで、動く呪文をGoogle先生に教えてもらったので備忘録として書いておく。

pip install -U chromedriver-binary-auto

この呪文を唱えると、何やらダウンロードして
[notice] A new release of pip is available: 23.2.1 -> 23.3.2
[notice] To update, run: python.exe -m pip install –upgrade pip
こんな感じで「更新してますよ~」ってメッセージが流れてきて、その後は上手く動いた。
良かった~。メモっとこう~。

コメント

タイトルとURLをコピーしました