---
# System prepended metadata

title: 帳戶連結系統

---

# 帳戶連結系統
功能 : 
1. 能在程式頁面中顯示所有銀行帳戶餘額
2. 搭配excel進行理財運算

設計思路:
1. 前往銀行網站，紀錄人為操控模式
2. 利用selenium來獲取餘額
3. 將餘額及資訊顯示在excel上

## 銀行網站
這裡採用國泰世華銀行作為範例
https://www.cathaybk.com.tw/MyBank/Home/Login
**以下是剛進入頁面時所需要的資訊**

> 身分證字號原始碼
> ![](https://i.imgur.com/bUWOLsP.png)
> 用戶代號原始碼
> ![](https://i.imgur.com/gkTtxF3.png)
> 網銀密碼原始碼
> ![](https://i.imgur.com/u9jdL25.png)
> 登入按鍵原始碼
> ![](https://i.imgur.com/DubwObg.png)
> 
> **按完按鍵後，來到主頁即可獲得資產總額**
> 台幣資產總額原始碼
> ![](https://i.imgur.com/yi4yumc.png)
> 
## 開始設計程式碼
爬蟲的第一步則是採用selenium的webdriver
[使用手冊](https://selenium-python.readthedocs.io/installation.html#)
```
from selenium import webdriver #瀏覽器套件
from selenium.webdriver.chrome.options import Options #創建Chrome驅動程序
from selenium.webdriver.common.by import By #檢索套件
```
在登入後需要抓取網頁原始碼
這裡採用BeautifulSoup來進行排版
```
from bs4 import BeautifulSoup #用於排版html
import time #時間模組
```
```
chrome_opt = Options()
chrome_opt.add_argument('--headless') #無頭模式
chrome_opt.add_argument('--disable-gpu') #禁用gpu
driver = webdriver.Chrome(options=chrome_opt)#使用Chrome作為瀏覽器
driver.get('https://www.cathaybk.com.tw/MyBank/Home/Login') #將銀行網址放入，導入此頁
elem = driver.find_element(By.ID,'CustID') #身分證字號ID
elem.send_keys('************') #輸入身分證字號
elem = driver.find_element(By.ID,'UserIdKeyin') #用戶代號ID
elem.send_keys('************') #輸入用戶代號
elem = driver.find_element(By.ID,'PasswordKeyin') #網銀密碼ID
elem.send_keys('************') #輸入網銀密碼
driver.find_element(By.XPATH,'//*[@id="divCUBNormalLogin"]/div[2]/button').click() #登入按鍵ID，並點擊此按鈕

time.sleep(0.3)#跳轉頁面最少需要0.3s，否則以下將會抓取登入頁面

html = driver.page_source #抓取網頁原始碼
soup = BeautifulSoup(html, 'html.parser')  # 用soup排版html
tags = soup.find_all("label", class_="totalAssets MoneyVisibility") #抓取資產總額所在原始碼
for i in tags[0]:
    ans = float(i.replace(',','')) #將數字中的逗號去掉並轉換成浮點數
    print(ans)
```
執行結果
![](https://i.imgur.com/rcj1PyG.png)

接下來將數值儲存到EXCEL裡的B2格
```
file_name = '資產收支表.xlsx'
wb = openpyxl.load_workbook(file_name) #讀取xlsx檔案
sheet = wb[wb.sheetnames[0]] #獲取第一個工作表
sheet['B2'] = ans
sheet['B2'].number_format='_-$* #,##0_-;-$* #,##0_-;_-$* "-"_-;_-@_-' #將格式樣式設定為貨幣 參考excel樣式表
wb.save('資產收支表.xlsx')
```
[excel格式樣式](https://openpyxl.readthedocs.io/en/stable/_modules/openpyxl/styles/numbers.html)
![](https://i.imgur.com/ROF7OXs.png)

這邊基本的串連方式已經完成，後續計算的動作用excel操作會更方便
