沒有 API,也能用 Playwright 把 Excel 資料安全地填進第三方表單
用設定檔、欄位定位、格式轉換與人工確認,建立可重複執行的瀏覽器填表流程
結論是:沒有 API 時,不必立刻退回到脆弱的座標點擊。優先使用 Playwright 控制真正的瀏覽器,依欄位語意或 DOM 元件定位;只有網頁元件無法辨識時,才把螢幕座標、圖片辨識或 OCR 當作備援。
結論是:沒有 API 時,不必立刻退回到脆弱的座標點擊。優先使用 Playwright 控制真正的瀏覽器,依欄位語意或 DOM 元件定位;只有網頁元件無法辨識時,才把螢幕座標、圖片辨識或 OCR 當作備援。
這次做出的第一版流程包含四層:資料來源、網站設定、瀏覽器操作,以及送出前的人工作業閘門。 為什麼選 Playwright
純座標點擊會受視窗大小、縮放比例、廣告、Cookie 提示和版面改動影響。Playwright 可以直接找「姓名」欄位、寄件國家選單或送出按鈕,畫面稍微移動時仍能工作。
例如,填文字與按按鈕可以寫成:
實作時還要為同一欄位準備多個候選定位方式。網站可能改掉 CSS class,但可存取名稱、label 或穩定 ID 仍然存在。程式依序嘗試候選 selector,全部失敗才停止並截圖。 用設定檔分離網站與資料
資料不應直接寫死在自動化程式裡。比較可維護的方式是: Excel 或 JSON 保存每筆寄件資料。 每個網站有自己的欄位對應設定。 共用執行器負責開瀏覽器、定位、填寫、驗證與記錄錯誤。
欄位類型至少要涵蓋文字、下拉選單、核取方塊、單選、文字區域與檔案上傳。網站設定同時要描述送出按鈕與成功訊息,否則程式只能知道「按過」,不能知道「成功」。 Excel 的地址不能原封不動貼上
真正困難的不是輸入,而是把人類資料轉成網站接受的欄位。
測試資料包含中文姓名、中文地址、收件地點與 30×20 的貨物大小。實際填寫時遇到三個問題: 國際寄件頁不接受中文姓名與城市,必須轉成英文拼音。 街道欄位有長度上限,完整地址必須拆成街道、城市、郵遞區號與第二地址行。 30×20 只有兩個數字,缺少單位、第三邊與重量,不能自行猜測後填入。
因此資料轉換層要區分「能可靠轉換」與「資訊不足」。姓名與城市可以轉成羅馬拼音;郵遞區號可以從原始地址拆出;缺少尺寸或重量則保持空白,回報給人補充。
不要為了讓表單看起來完整而捏造資料。自動化最重要的不是填滿,而是讓每個已填值都能追溯到來源。 登入、驗證碼與送出要分層處理
瀏覽器使用 persistent context 保存登入狀態,第一次可由使用者手動登入,之後沿用同一份瀏覽器資料。
CAPTCHA、簡訊 OTP 和需要人判斷的警告,不應嘗試繞過。程式應停在該畫面讓人接管。
送出也不應與填寫綁死。預設流程只做到: 開啟頁面。 填入已確認的資料。 列出缺少的必填欄位。 保留瀏覽器給人檢查。
只有網站流程已反覆驗證,且業務真的允許自動提交時,才開啟 --submit。送出後還要等待成功提示,不能只把 click 沒報錯當成成功。 失敗必須留下可診斷資訊
瀏覽器自動化失敗時,至少保存: 當下全頁截圖 錯誤堆疊 執行時間 使用的網站設定名稱 最後成功完成的欄位
這能分辨是網站改版、欄位格式不符、網路中斷,還是資料本身不足。沒有這些資訊,自動化只會變成偶爾失靈、沒人知道原因的黑盒子。 適合與不適合的情境
適合使用這個方法: 網站沒有 API,但允許使用者透過瀏覽器正常操作。 表單欄位固定,且有大量重複輸入。 可以在提交前保留人工確認。
不適合直接全自動: 每次都需要 CAPTCHA 或簡訊驗證。 涉及付款、法律聲明或高風險承諾。 原始資料缺漏很多,必須大量猜測。 網站條款明確禁止自動化操作。
可用的第一版不等於「能點」。它應該能讀資料、轉換格式、可靠定位、標示缺漏、保留證據,並把最後決定交給人。 本篇由 codex(gpt-5) 於開發過程中產生。 標籤:codex playwright browser-automation excel form-filling