MoneyFoward MEのマイデータをスクレイピングして自分の好きな分類で集計する(Python)(1)

## はじめに

家計簿・資産管理アプリの代表格MoneyFoward MEを使用しています。

家計簿ではなく、ほぼ資産管理としての使用になります。MoneyFowardに限らず、他にも類似の資産管理・家計簿アプリはありますので、MoneyFowardでなくてはダメということではありません。

しかし、銀行や証券会社等々の情報を登録しておくと、口座残高・入手金履歴・カード使用履歴などもすぐにわかりますので、**資産管理・家計簿アプリ自体はキャッシュレス時代には必須のアイテム**ではないかと思います。


https://moneyforward.com/

## MoneyFoward MEの便利な点と不満点

#### 便利なところ
日々のお金の動きも大事ですが、メインは、**現在保有している資産の内訳と資産履歴をグラフ化してくれる機能**が重要です。とても便利で、現金・株・投資信託、等々の分類ごとに評価額・評価損益も含めて表示してくれます。

また、連携しているサービスが多く、銀行・証券会社・クレジットカード等々が一元管理できるところです。今では何かサービスを申し込む検討をする際に、MoneyFowardと連携しているかを確認するようになっているくらいです。

#### 不満なところ
現在保有している資産の内訳を表示する際の区分が自分の好きなようにカスタマイズできないです。特に、少額でビットコインを持っていますが、暗号資産が「現金」のところに区分されるのは勘弁してくれと思います。（これがMoneyFoward MEの最も修正をしてほしいところだ、と思っているのは私だけではないはず、と信じています）
さらに言えば、預金の区分でも「銀行に預けている保守的な資産としての預金」と「証券口座に預けてあるもうすぐ株や投資信託に変わる預金」も分けたいです。

サンプル画像
![Screenshot_2 (Small).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167772/a1ab1b45-f8c6-9bb9-478a-2689e9ac7032.png)

持っている資産の種類により、やりたいことは細かくなるものだと思います。また、人により持っている資産が違いますので同じにはならないと思いますが、私の場合、具体的には以下のような点です。
- 「預金・現金・暗号資産」について、「銀行口座にある預金」・「証券口座にある預金」・「暗号資産」の3つに分けたい
- 「株式(現物)」について、「日本個別株」・「米個別株」・「米ETF」に分けたい
- 「投資信託」について、投資先(全世界・先進国・S&P500・国内など)による区分で確認したい


## アドバンスコースの登場
最近、アドバンスコース(https://moneyforward.com/pages/extra_premium) というスタンダードコースの上がでてきて、配当金が見れたり、資産にタグづけができるようになりました。追加で費用はかかりますが、資産へのタグづけをすることによりMYポートフォリオが作成できるようになりました。このアドバンスコースで不満は解消されたという方もいるかもしれません。

## やりたいこと
調べてみると同じ不満を持つ方は既にいらっしゃって、自分のデータを取得して、**自分の好きな分類で表なりグラフなりを作成**しているようでしたので、私もそちらを参照させていただきながらやってみようと思いました。

具体的には、以下の3つとなります。
**①「Python・Selenium」を使用してMoneyFoward MEにログインする（今回）**
②保有している資産をスクレイピングして、それぞれの保有資産を自分の欲しい分類にて集計
③EXCELファイルにてダウンロードする


## コード（ログイン部分）

※メールアドレスやパスワードは.envから読み込み
※2段階承認をしている場合の実装方法は参考URLを確認
※ページの推移を確実に行うため、各ステップの間にsleepをいれている

~~~ mf_get.py
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from time import sleep
from dotenv import load_dotenv
import os

# Load .env file
load_dotenv()

EMAIL = os.environ['EMAIL']
PASSWORD = os.environ['PASSWORD']

# Define browser
options = webdriver.ChromeOptions()

browser = webdriver.Chrome(
    ChromeDriverManager().install(),
    options=options
)

print('start login')

# Jump to email sing-in page
url = 'https://id.moneyforward.com/sign_in/email'
browser.get(url)
sleep(1)

# Enter email
elem_loginMethod = browser.find_element(by=By.XPATH, value='/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/input')
elem_loginMethod.send_keys(EMAIL)
sleep(1)

# Click login
elem_login1 = browser.find_element(by=By.XPATH, value='/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/div[3]/input')
elem_login1.click()
sleep(1)

# Enter password
elem_password = browser.find_element(by=By.XPATH, value='/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/input[2]')
elem_password.send_keys(PASSWORD)
sleep(1)

# Click login
elem_login2 = browser.find_element(by=By.XPATH, value='/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/div[3]/input')
elem_login2.click()
sleep(1)

# Click forwardme
elem_login3 = browser.find_element(by=By.XPATH, value='/html/body/main/div/div[2]/div/div[1]/div/ul/li[2]/a')
elem_login3.click()
sleep(1)

# Click login
elem_login4 = browser.find_element(by=By.XPATH, value='/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/div[2]/input')
elem_login4.click()
sleep(1)

# Click Group
elem_group = browser.find_element(by=By.XPATH, value='//*[@id="group_id_hash"]/option[3]')
elem_group.click()
sleep(1)

# 資産タブに移動
elem_portfolio = browser.find_element(by=By.XPATH, value='//*[@id="header-container"]/header/div[2]/ul/li[4]/a')
elem_portfolio.click()
sleep(1)

~~~


## XPATHのVALUEを取得する方法

デベロッパーツールで、XPathを取りたい要素を右クリックして「Copy」→「Copy XPath」で取得可能。

![Screenshot_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167772/75d17dfc-80e3-09e4-5df6-50280f390aeb.png)

## 次回

次回は、以下の部分を実施していきたいと思います。
②保有している資産をスクレイピングして、それぞれの保有資産を自分の欲しい分類にて集計
③EXCELファイルにてダウンロードする

追記（②・③部分について投稿しました）

https://qiita.com/yoshi_yast/items/8736b1436b2954071b79


## 参考URL
同じような形でMoneyFowardをスクレイピングをしている方がいらっしゃいましたので参考にさせていただきました(感謝)

https://mamunga.com/money-forward-scraping-get-utility-bills


https://www.yutorism.jp/entry/2019/06/11/002437


https://be-outliers.com/it/scrayping-mf-by-python-1/