Pythonでマネーフォワードの登録を自動化する方法

Pythonの使い道として、クラウド会計ソフトのマネーフォワードでの仕訳登録の自動化を紹介します。

※マネーフォワードとPythonの画面 by Panasonic S1

 

マネーフォワードの登録

クラウド会計ソフトのマネーフォワードでは、他のソフトと同様に、ネットバンクやクレジットカードなどのデータを連動できます。
連動後は、これを確認して、登録するのですが、これがそれなりの手間です。
※画面は、テスト用に使っているものです。

自動仕訳のルールを設定していれば、そのまま登録できればいいのですが(freeeはできます)、マネーフォワードではできません。
(私が知る限り)

一括登録の機能はあり、チェックをいれて、[一括登録]を押せばいいのですが、登録できるのは、画面に表示されているデータ分(初期は10件)だけです。

 

[続きを表示]をクリックすれば、20、30、40……と表示できますが。
(あまり表示しすぎると固まります)

 

一括登録で、こういった確認ができるのもめんどくさいです。
毎回、Enterキーを押さなければいけません。

この登録をPythonで自動化できます。
(Chromeを使います)

以前、RPA(UiPath)を使っていましたが、Pythonのほうが処理は速く安定し、Macでも使えるので。
ただ、Pythonの敷居が高いのは事実です。

 

Pythonを使う設定

Pythonは使い始めるまでの敷居がそれなりにあります。
こちらの記事も参考にしていただければ。

PythonとEXCELマクロ比較。Pythonの導入・設定【Windows・Mac両対応】

以下、解説していきます。
(Windows・Mac共通です)

Pythonのダウンロード、インストール

Pythonは無料で使えるソフトです。
これをダウンロード、インストールしましょう。
Welcome to Python.org
Windows、Macそれぞれに合わせて。
(MacにはPythonが入っていますが、古いバージョンなので、ダウンロード、インストールは必要です)

インストール後、PIPといわれるPythonの管理システムをアップグレードしましょう。
Windowsなら、PowerShell(標準ソフト)、Macなら、ターミナル(標準ソフト)に

pip install --upgrade pip

と入れてEnterキーを押します。

これをやっておかないと、この後の処理がうまくいかないことがあるのでやっておきましょう。

 

Seleniumのインストール

次にGoogle Chromeを動かすライブラリといわれるものをインストールします。
ライブラリとは、Pythonで使えるアプリのようなものです。

同じく、PowerShell(Windows)、ターミナル(Mac)で、
pip install selenium
を入れてEnterキーを押します。

 

ChromeDriverのダウンロード・解凍・保存

さらには、Chromeを動かすChromeDriverというものを入れなければいけません。
ここからダウンロードしましょう。
ChromeDriver – WebDriver for Chrome – Downloads

Chromeのバージョンによってダウンロードするものが変わります。
ということは、Chromeがバージョンアップしたら、ChromeDriverもバージョンアップする必要があるのです。

 

Chromeのバージョンは、Chromeで[設定]→[Chromeについて]で確認できます。
この記事執筆現在だと、91です。

それぞれ使っているパソコンによってわかれていますので、該当するものをダウンロードしましょう。

ダウンロードしたZIPファイルをダブルクリックで解凍し、所定の場所に保存します。
この場所をPythonで使うので、わかるところに保存しておきましょう。

これでようやく準備完了です。
この敷居は高いよなーと思います。
バージョンアップもしなければいけないですし。

なお、Pythonを別のソフトで使う方法もありますが、今回は標準のもので解説しました。
よしあしもあるので。

Pythonでマネーフォワードの登録を自動化する方法

Pythonをインストールすると、同時にインストールされるIDLEを開き、

さらに、Ctrl(MacはCommand)+Nで新規ファイルを開きます。
ここにPythonのコードを書いていくor貼り付けていくわけです。
実行は、F5。
保存していないと、保存しますか?という確認が出てくるので保存しましょう。

 

今回のコードはこういったものです。
以下、解説します。

 

from selenium import webdriver
from selenium.webdriver.common.alert import Alert
import time


url='https://accounting.moneyforward.com/transaction_journals?cti=TBVshtwEL8a8nkvqObysXQ&search_form%5Basset_acts%5D%5Baccount_id_hash%5D=D3rSaMnilaib1QxoqqlinQ'

#■設定
driver='/Users/yoichiinoue/Python/chromedriver'  #chromediverの場所
loginid='info0@gmail.com' #ログインID
password='xxxxxx' #パスワード
waittime=3 #待つ秒数
repeat= 1 #繰り返し回数

#ページの読み込み
chromedriver = webdriver.Chrome(driver)
chromedriver.get(url)

#マネーフォワードへログイン
chromedriver.find_element_by_xpath('/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/input').send_keys(loginid)
chromedriver.find_element_by_xpath('/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/div[3]/input').click()
chromedriver.find_element_by_xpath('/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/input[2]').send_keys(password)
chromedriver.find_element_by_xpath('/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/div[3]/input').click()
                                

for i in range(repeat):
    #チェックボックスクリック
    chromedriver.find_element_by_xpath('//*[@id="item_bulk_select"]').click()

    #一括登録ボタンクリック
    chromedriver.find_element_by_xpath('//*[@id="js-ca-main-contents"]/div[5]/div[2]/div[1]/div/a[1]').click()

    #メッセージボックスクリック
    Alert(chromedriver).accept()

    #3秒待つ
    time.sleep(waittime)

    #ブラウザ更新
    chromedriver.refresh()


 

ここで、さきほどインストールしたselenium、その機能の1つのAlert、標準機能のtimeを読み込みます。
インストールするだけではなく、読み込まないと使えません。
さらには、マネーフォワードの自動仕訳登録の画面をURLで指定しています。

次は設定。
それぞれのパソコン、ユーザーによって、
・パソコンのChromeDriverの場所
・マネーフォワードのログインID
・マネーフォワードのパスワード
そして、
・画面の読み込みを待つ時間
・このプログラムの繰り返し回数
を入れます。

パソコンのChromeDriverの場所は、それぞれ異なるので気をつけましょう。
特にWindows、Macでは。
私は、Windows版、Mac版と、コードを保存しています。
だいたいMacで使っていますが。

画面の読み込み速度よりPythonのほうが速くて、うまく処理できないことがあるので、3秒待っています。
ここをもうちょっと速くしたり、遅くしたりして、処理を安定させることができるのです。
プログラムは、繰り返し回数を入れるようにしました。
100個のデータがあれば10と入れれば、その回数だけ繰り返します。
「データがあるだけ繰り返す」ということもできますが、今回は、回数を入れるようにしました。
多めに入れても、データがなくなれば、プログラムの実行は終わるので、多めでもかまいません。

なお、自動仕訳パターンの設定を事前にやっておくことが前提です。

 

次にChromeDriverを読み込み、ページを読み込みます。

chromedriver.get(url)は、「ChromeDriverがURLを読み込んだ(get)」という意味です。

マネーフォワード、Pythonのしくみ上、毎回ログインしなければいけません。
(開いている画面で操作もできなくはないのですが)
そのため、ログインのところからコードを書いていきましょう。
また、Chromeは、新しいウィンドウで、次のような表示のもとに開きます。

 

ログインは、
・IDを入れる
・ボタンをクリックする
・パスワードを入れる
・ボタンをクリックする
の4工程です。
ただ、これを全部書く必要はありません。

chromedriver.find_element_by_xpathは、共通で、chromedriverは私が設定した任意のもの(変数)です。
別の言葉でもかまいません。
そのchromedriverが、find_element_by_xpathで、「XPathという種類で探す」という意味です。
ブラウザの中は、それぞれ名前(要素)がついています。

css selector、id、name、XPathなど。
この中で、安定して指定できるのは、XPathです。

Chromeで指定してクリックや入力したい場所を右クリックし[検証]をクリックしましょう。

 

右側にこういったものが表示されます。
ここで、その該当箇所をどう表現しているかがわかるのです。
該当箇所がうまく表示されていない(強調されていない)ときは、この状態で再度選択して、右クリック→[検証]をクリックすると、うまく表示できます。

 

 

該当箇所の強調表示されているところを右クリックし、[Copy XPath]をクリックしましょう。
これをそれぞれコード内に貼り付けていくのです。
このあたりは、該当箇所をクリックすればいい、RPAのほうが断然楽です。

このXPath、Windows、Mac(M1)で違うことがあるので、実行してみて調整しましょう。

次のforは繰り返し。
repeatで設定した回数だけ、その下のインデントがついたところを繰り返します。
Pythonは、インデントが意味を持つのです。

繰り返しているのは、
・チェックボックスをクリック(すべて選択)
・一括登録ボタンをクリック
・出てきた確認ボックスをOKでクリック
そして、
・3秒待つ
を入れて、
・ブラウズを更新
という流れです。

チェックボックス、一括登録ボタンは、XPathで指定し、確認のメッセージボックスは、

Alert(chromedriver).accept()

でクリックできます。

その後、ちょっと待ち、

time.sleep(waittime)

ブラウザを更新すると、次の10件が出てくるので、指定した回数だけ延々と黙々と確実に無料で繰り返してくれるのです。

chromedriver.refresh()

 

なお、このプログラムを実行するたびに、警告メールが強制的に来ます。
私はGmailでフィルタリングをかけていますが。

 

Pythonの1つの使い道として、必要な方は使ってみていただければ。

 



■編集後記
昨日は、朝公園、午後はオンラインセミナーを受講。
夕方は、オリンピックコースをちょっとだけトライアスロンバイクで。
トライスロンチームのユニフォームを着て。
2019年の交通事故での大腿骨頸部骨折、2020年からのおしり事件の影響で、自転車に乗れない状態でした。
路上を走るのは怖いですけど。
(昨日は車通りの少ないところ)
交通事故に関しては、ランは禁止、バイクはOKではあります。

オンラインセミナーは、写真。
写真を事前に提出し、講評していただくもの。
家族で観ていました。

1日1新Kindle『1日1新』Instagram『1日1新』
とあるオンラインセミナー
妻の自転車発注

■娘(4歳4ヶ月)日記→Kindle『娘日記』
そろそろペダル付きの自転車が欲しいようで。
今度見に行こうかと。
夕方は、パパの自転車をカメラで撮影。
うまく撮るもんです。
ユニフォームは、0歳のときから見せていたのですが、記憶に残るようになった頃に交通事故だったので、はじめて見るような感じです。
写真ではよく見ていますが。

Python入門

Posted by 税理士 井ノ上 陽一