- 省時
約 978 頁的客戶登錄資料,改成每天自動一次取回對帳
每天一次取回平台上全部客戶登錄資料,驗證後整批更新試算表;對平台只讀不寫,登入仍需人工完成。
背景與使用技術(4 項)
對帳需要第三方平台後台的客戶登錄資料,但後台只能匯入、不能匯出,而且每頁只顯示 10 筆,要點 978 頁才看得完。改成每天自動執行一次:不逐頁翻,直接呼叫頁面本身的清單請求,約 2 秒取回全部約 9,777 筆,寫進每天更新的試算表。工具只讀不寫,資料有異常寧可當天不更新。
誰在用
負責核對平台客戶資料的財務與對帳人員
原本怎麼做
對帳要比的是「平台上登錄的客戶資料」和「公司認知的客戶資料」是否一致,但平台那一側沒辦法整體看到:後台一頁 10 筆、共約 978 頁,沒有匯出、也沒有公開 API;登入還有圖形驗證碼,一定要真人參與。結果是任何形式的整體比對實務上都做不到。
前後對比
量測:實測=有計時或有紀錄;估計=喜特先生推估;客戶自述=客戶回報;規格=設計上的固定條件;待補=尚未取得數字。
流程一眼看懂
後台清單(一頁 10 筆)
逐頁查看
無法整體比對
人工登入一次
沿用瀏覽器登入狀態
一次取回全部
四項檢查
更新試算表並回報 Slack
流程示意:依本案既有做法整理,非客戶實際畫面。
做了什麼
- 不模仿翻頁:直接要求全部資料,一次回應就是完整結果。
- 寫入前先把關:結果非空、欄位結構一致、統一編號無重複、無個資遮罩殘留,任一不過就不覆寫,改發告警。
- 只讀:程式裡沒有寫回平台的路徑,唯一會改動的是那張試算表。
- 每次執行都回報:成功、跳過或驗證失敗,結束時都發一則 Slack 報告。
程式碼與實作細節收在頁面下方,需要時再展開。
你的情況像這樣嗎?
- 你要核對的資料在別人的後台,沒有匯出,也沒有 API。
- 一頁一頁翻才看得到全貌,所以從來沒有整體比對過。
- 資料含個資,需要只讀、出錯寧可不更新。
更多成果與運作條件
全部客戶資料一次取回
登入完成後,約 2 秒取得 9,777 筆資料
978 頁 → 1 次(實測)
後台翻頁收斂為一次全量撈取
0 條寫回路徑
工具設計上只讀,要改平台上的資料仍須回到平台本身
以上為本案既有成果與運作條件;估計值依原始資料標示,其他專案需另行評估,並非通用成效保證。
挑戰:原本遇到的困難
對帳要比的是「平台上登錄的客戶資料」和「公司認知的客戶資料」是否一致。問題在於平台那一側沒有辦法整體看到:
- 只能一筆一筆查:後台一頁 10 筆、共約 978 頁,任何形式的整體比對實務上都做不到
- 沒有匯出路徑:後台只有匯入功能,沒有可用的匯出,也沒有公開 API 可以呼叫
- 登入有圖形驗證碼:程式無法自行登入,這一步一定要有真人參與
- 資料含個人資訊:客戶地址等欄位會出現在試算表裡,抓取與儲存都要謹慎
因此前提是:只借用已登入瀏覽器的身分、只讀、出錯時寧可不更新。
完整解決方案與設計取捨
以常駐的 Chrome 作為工作階段,由人工登入一次。之後程式透過 Chrome DevTools Protocol(瀏覽器開放給外部程式控制的介面)接上這個瀏覽器,沿用它的登入狀態發出請求。
核心設計
- 不模仿翻頁:後台清單請求接受每頁筆數參數,直接要求全部資料,一次回應即是完整結果集
- 寫入前先把關:四項檢查(結果非空、欄位結構一致、統一編號無重複、無個資遮罩殘留)任一不過就不覆寫,改發告警
- 只讀設計:程式碼中沒有任何寫回平台的路徑,唯一會改動的是那張試算表
- 每次執行都回報:不論成功、跳過或驗證失敗,結束時都發一則 Slack 報告
- 排程與重試:macOS 的排程服務 launchd 每日 09:00 執行,失敗時於 12:00、15:00、18:00 重試,當天成功一次後就不再重跑
技術與實作細節
展開完整實作說明
為什麼借用頁面的請求,而不是正式 API?
因為沒有可以呼叫的 API。平台的管理頁只有匯入,找不到匯出。這支工具走的是使用者本人的路徑,只在登入這一步由人完成,之後的請求都以已登入的瀏覽器身分發出。
它唯一省略的是「點擊翻頁」這件事。管理頁自己的清單請求吃每頁筆數的參數,所以工具直接要求整份清單,而不是一頁一頁翻。這裡借用的是頁面本身的請求,不是去讀畫面上長出來的值。
代價是這個做法依賴平台前端的行為。平台若改版,工具會失效;這個失效會出現在每次執行的報告裡,不會靜默發生。
寧可當天不更新,也不發布壞資料
撈回來的資料在寫入試算表前要通過四項檢查:結果是不是空的、欄位結構是否與預期一致、統一編號有沒有重複、本該是明碼的欄位有沒有混入個資遮罩的痕跡。任一項不過,這趟就不覆寫,直接發告警。
當天沒更新,資料只是舊了一天;悄悄用錯誤資料蓋掉正確資料,才是要很久以後才會發現的問題。
每次執行都會發一則 Slack 報告,不論成功、跳過還是驗證失敗。收不到這則報告本身就是異常訊號,代表排程可能整個失敗到連告警都發不出去,不能當成「今天沒事所以沒有訊息」。
登入狀態監控與工作階段
每 5 分鐘探測一次登入狀態。若發現被登出,立即發出 Slack 告警,不必等到下一次排程才察覺。這個探測流量同時讓工作階段在兩次執行之間保持存活,是自動化能持續運作的一部分。
跑這支工具的電腦必須保持清醒,因為工作階段撐不過睡眠。試算表永遠只反映最後一次撈取當下的狀態,要真的修改客戶登錄資料,仍須到平台本身處理。
人工註記放在隔離的分頁
主頁每天整頁覆寫,所以不能讓人直接在主頁上加註記,隔天就會被洗掉。人工註記(例如某客戶需寄紙本發票、聯絡窗口變更)放在獨立的備註分頁,以統一編號對應。自動化只把備註當成唯讀參考欄位帶回主頁,從不寫入這張分頁。