acctfは、銀行や証券会社をスクレイピングして入出金履歴、株や投信の保有数や取得価額、現在価格を取得するライブラリです。
下記の銀行等に対応しています。
- 住信SBIネット銀行
- 預金(ハイブリッド含む)(円のみ)
- 入出金履歴
- 代表口座
- ハイブリッド預金口座
- 目的別口座
- WealthNavi(円表示のみ)
- 各資産クラス
pip install acctf
playwright install chromiumuvを利用する場合:
uv add acctf
uv run playwright install chromium注: v0.6.0 以降、ブラウザ自動化に Playwright を採用しています。 arm64 Linux (Raspberry Pi 5 など) では Chromium のみサポートされ、Firefox は動作しません。
from acctf.bank.sbi import SBI
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
sbi = SBI(page=page).login("<ユーザID>", "<パスワード>")
b = sbi.get_balance("7654321")
print(f"口座番号, 店舗, 残高, 口座タイプ")
print(f"{b[0].account_number}, {b[0].branch_name}, {b[0].value}, {b[0].deposit_type}")
sbi.logout()
browser.close()口座番号, 店舗, 残高, 口座タイプ
7654321, 本店, 1234567.0, DepositType.ordinary住信SBIネット銀行はUIの変更に伴い、履歴のCSVをダウンロードしてデータを取得する方式です。
ブラウザコンテキストを accept_downloads=True で生成する必要があります。
また、ダウンロードしたCSVファイルはデータ取得後に削除されます。
from pathlib import Path
from acctf.bank.sbi import SBI, AccountName
from acctf.bank import CurrencyType
from playwright.sync_api import sync_playwright
from datetime import date
download_directory = str(Path.cwd()) + "/tmp"
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
# CSVダウンロードのため accept_downloads=True が必須
context = browser.new_context(accept_downloads=True)
page = context.new_page()
sbi = SBI(page=page).login("<ユーザID>", "<パスワード>")
hist = sbi.get_transaction_history(
"7654321",
date(2023, 12, 1),
date(2023, 12, 31),
download_directory=download_directory,
currency=CurrencyType.jpy,
account_name=AccountName.Representative, # 代表口座
)
hist += sbi.get_transaction_history(
"7654321",
date(2023, 12, 1),
date(2023, 12, 31),
download_directory=download_directory,
currency=CurrencyType.jpy,
account_name=AccountName.Hybrid, # ハイブリッド預金口座
)
print(f"日付, 取引内容, 金額")
for h in hist:
print(f"{h.date}, {h.content}, {h.value}")
sbi.logout()
browser.close()from acctf.other.wealthnavi import WealthNavi
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
w = WealthNavi(page=page).login("<ユーザID>", "<パスワード>", "<TOTP>")
# Time-based One Time Passwordを設定していない場合
# w = WealthNavi(page=page).login("<ユーザID>", "<パスワード>")
print("資産クラス, 現在価格, 損益")
for h in w.get_valuation():
print(f"{h.name}, {h.value}, {h.pl_value}")
w.logout()
browser.close()資産クラス, 現在価格, 損益
米国株(VTI), 123456.0, 12345.0
日欧株(VEA), 123456.0, 12345.0
新興国株(VWO), 123456.0, 12345.0
債券(AGG), 123456.0, 12345.0
金(GLD), 123456.0, 12345.0
金(IAU), 123456.0, 12345.0
不動産(IYR), 123456.0, 12345.0
現金, 123456.0, 0.0Raspberry Pi 5 などの arm64 Linux 環境では、Playwright が公式に提供しているブラウザバイナリは Chromium のみ です。Firefox および branded Chrome は arm64 Linux では動作しません。
公式 Docker イメージ mcr.microsoft.com/playwright/python は linux/amd64 / linux/arm64 の multi-arch ビルドが提供されているため、Kubernetes クラスタ (arm64) 上でも追加設定なしに利用できます。Docker での実行サンプルは examples/ を参照してください。
v0.6.0 で Selenium から Playwright へ移行しました。コンストラクタが driver= (Selenium WebDriver) から page= (Playwright Page) に変わります。
# v0.5.x (Selenium)
from selenium import webdriver
driver = webdriver.Chrome()
sbi = SBI(driver=driver).login(...)
# v0.6.0 (Playwright)
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
sbi = SBI(page=page).login(...)timeout の単位が秒 (30) からミリ秒 (30000) に変わっています。
このリポジトリは uv で依存関係を管理しています。
uv sync
uv run playwright install chromiumuv builddist/ 配下にホイール (.whl) と sdist (.tar.gz) が生成されます。
uv publish