Copyright © 2026 Falo x Force Cheng. Version 1.02. Educational use only.
Chrome Extension DOM Automation

AI 時代的外掛控制實戰:
Chrome Extension 填單助手

本實戰專案專為初學者設計。您將學習如何開發一個輕量級的 Chrome 側邊欄外掛,實現網頁 DOM 節點的讀取與自動填寫,直觀掌握擴充功能與網頁之間的通訊與控制機制。

1. 專案定位與核心觀念

傳統的網頁自動化或表單填寫常需依賴複雜的大型 RPA 工具。但現在,透過開發一個輕量級的 Chrome 外掛,即可利用簡單的 JS DOM 操作與通訊協定,實現靈活且強大的網頁填單助手。

在進入外掛控制前,我們在課堂開頭先下載並安裝了 FALO Instagram Video Enhancer (v1.0.1) 擴充功能,體驗了外掛如何注入程式碼。接著,我們將延伸此概念:如果我們是要「控制網頁、幫忙進行 ERP 表單自動化」呢?本案將帶您透過實作,直觀理解 Chrome 外掛與網頁 DOM 的通訊控制。

外掛雙向控制核心觀念剖析

寫入網頁 (Write)
外掛側邊欄的 JavaScript 向 active tab 發送指令與數據,網頁端的 content.js 接收到後,透過尋找 CSS Selector 將數值填入對應的 DOM 輸入框中。
擷取資料 (Read)
當需要讀取網頁狀態時,外掛發送擷取訊息,注入網頁的 content.js 讀取指定 DOM 欄位的 value,並透過 sendResponse 跨視窗回傳填入外掛控制項。

2. V1 網頁操作輔助器 (ERP 表單輔助器)

我們實作的第一個階段是 **ERP 表單輔助器**。當我們載入一個 Chrome Extension 到網頁時,外掛主要進行雙向資料控制:

  • 讀取網頁 (Read DOM)
    檢測頁面上的輸入欄位與系統狀態,並讀取 DOM 節點的 value 值回傳至側邊欄中。
  • 修改網頁 (Write DOM)
    在外掛側邊欄發送寫入指令,將數值填寫進對應的網頁 DOM 輸入框中,填值成功後伴隨亮黃色的填值閃爍視覺反饋。

這代表 Extension 可以完全控制網頁,但是它有一個技術特性與維護要點 (需注意事項)外掛高度依賴網頁的 DOM 結構。只要前端代碼重構、CSS Selector 改變,外掛對應的定位邏輯就需要同步維護與更新,否則將會找不到目標元素而失效。

💡 進階二創與模仿學習 (課外高手專區):
如果您已經掌握了主線的 ERP 填單助手開發,並想學習如何觀察市面上的產品、利用 AI Agent 進行「模仿、改良、與二創」來開發更具互動性的外掛,我們非常推薦您課後參考延伸案例: 👉 模仿高手的外掛案例:FALO Instagram Video Enhancer v1.0.1 ➔
該案例包含了「懸浮遙控器、OLED 狀態顯示、畫面上 HUD 操作回饋、自訂音量控制」等進階 DOM 注入與事件控制黑科技,是極佳的 Vibe Coding 延伸教材。

📡 實體測試網頁 DOM 欄位規格對齊 (DOM Selector Specifications)

外掛之所以能精準控制網頁填單,是因為外掛開發與網頁結構之間遵守同一個 **DOM 規範契約**。當外掛被載入至我們的 實體外掛測試頁 (erp.html) 後,對齊的 DOM 規格定義如下:

元件名稱 CSS Selector (ID) 資料型態與說明
採購單號輸入框 #po-number String 類型的文字輸入框
產品代碼輸入框 #product-code String 類型的文字輸入框
進貨部門選單 #dept-code select 元素,選項包含 PUR, WH, QC, RD
進貨數量輸入框 #received-qty Number 類型的數值輸入框
產品效期輸入框 #expiry-date Date 類型的日期選擇輸入框
系統流水序號 #system-serial-no 入庫成功後動態生成的序號標記元件
檢核表單按鈕 #btn-check-form 主網頁上驗證欄位格式的按鈕
確認入庫按鈕 #btn-submit-entry 主網頁上正式寫入資料的入庫按鈕

🔌 Chrome 擴充功能元件劃分與架構剖析

🛡️ Chrome 外掛必備三劍客(必備黨)

這是 Chrome 外掛得以加載並運行的**最基本身分與核心權限檔案**。

  • manifest.json
    外掛的主設定檔。聲明外掛名稱、版本、權限(如 activeTab、sidePanel)、背景 Service Worker 以及要注入的內容腳本。
  • background.js
    背景 Service Worker 腳本。負責調度,例如點擊外掛 Icon 的事件時開啟右側 Side Panel 面板。
  • content.js
    直接注入到目標網頁中執行的 JavaScript。擁有直接讀寫網頁 DOM 節點的權力,負責填值與派發事件。
🔌 本專案專屬補充說明(額外組件)

負責呈現介面與實作高級輔助功能。

  • sidepanel.html & sidepanel.js
    外掛側邊欄的面板頁面與控制腳本。運行在獨立的 Extension 宇宙中,負責 UI 互動與數據備份,並與 content.js 進行通訊。
  • content.css
    隨 content.js 一起注入到目標網頁的 CSS 樣式。專門用來宣告閃爍的 CSS 動畫。
  • erp.html (外掛演練靶機)
    **本次課程的實體測試網頁**。模擬企業 ERP 表單,外掛即在此網頁上進行讀寫控制演練。

📡 跨宇宙雙向通訊(Message Passing)架構

┌─────────────────────────────────┐ 📡 跨宇宙通訊 (Message Passing) ┌────────────────────────────────┐ │ 外掛側邊欄 (Side Panel 宇宙) │ ◄─────────────────────────────────────────────────► │ 目標網頁注入 (Content 宇宙) │ │ [sidepanel.html/sidepanel.js] │ chrome.tabs.sendMessage (發信通知填值/讀取) │ [content.js] │ └──────────────┬──────────────────┘ sendResponse (回信告知流水號與結果) └───────────────┬────────────────┘ │ │ │ 1. 產生/匯入資料 │ 2. 直接讀寫控制 DOM ▼ ▼ ┌─────────────────────────────────┐ ┌────────────────────────────────┐ │ CSV 資料庫 / 隨機生成器 │ │ 實體 ERP 測試網頁 (erp.html) │ │ (本地端 sidepanel.js 管理處理) │ │ [#po-number, #btn-check-form]│ └─────────────────────────────────┘ └────────────────────────────────┘

3. AI Agent 實戰 Prompt 指南

本實戰引導學員從最簡單的「單欄讀寫」開始,逐步擴展至「全表單批次操作與清空」,最終躍升至具備「CSV 備份與遠端遙控」的完整自動化外掛。

🎯 Step 1:單欄雙向讀寫控制 (小白入門)

功能目標:最簡單的一進一出,側邊欄僅包含一個「採購單號」輸入欄位以及對應的填入與擷取按鈕。

💬 一般小白簡單版 Prompt (直接發送給 AI)
我有一個線上 ERP 測試網頁:https://falo-taiwan.github.io/class/a01/class3/cases/chrome_extension/erp.html。我想寫一個 Chrome 瀏覽器外掛,外掛打開後在右側滑出側邊欄,側邊欄有一個填「採購單號」的格子。點一下格子旁邊的「填入」按鈕,網頁上的採購單號欄位(它的 ID 是 #po-number)就會自動填好;如果網頁上已經有寫字,我點「擷取」按鈕,Chrome 外掛就能把我網頁上寫的字抓回來外掛顯示。請幫我寫出外掛程式碼。
⚡ 點此展開 ── 專家指點版完整 Prompt (精確代碼生成)
💬 複製以下結構化提示詞貼給 AI
🎯 Step 2:全部欄位單獨讀寫 + 一鍵全填與清空 (多點控制)

功能目標:直接對齊真實 ERP 網頁五個欄位(含下拉選單),各欄具備獨立讀寫,並有全局一鍵寫入、擷取與清空重置。

💬 一般小白簡單版 Prompt (直接發送給 AI)
我有一個線上 ERP 測試網頁:https://falo-taiwan.github.io/class/a01/class3/cases/chrome_extension/erp.html。我想開發一個 Chrome 瀏覽器側邊欄外掛,外掛打開後有 5 個輸入欄位,分別是「採購單號」(#po-number)、「產品代碼」(#product-code)、「進貨數量」(#received-qty)、「產品效期」(#expiry-date)和「進貨部門」下拉選單(#dept-code,部門選項包含 PUR, WH, QC, RD)。每個欄位旁邊都要有獨立的「填入」與「擷取」按鈕。另外,側邊欄底部要提供「一鍵全填入」與「清空表單」(將網頁與外掛的 5 個欄位值全部清空)按鈕。請幫我寫出完整的 Chrome 外掛程式碼與檔案結構。
⚡ 點此展開 ── 專家指點版完整 Prompt (精確代碼生成)
💬 複製以下結構化提示詞貼給 AI
🎯 Step 3:完整自動化與資料備份 (V1.5 完整版)

功能目標:加入隨機產生資料(配合台北時間)、CSV 資料匯出/匯入備份還原,以及遠端遙控檢核、入庫、流水號捕捉與自動下載報告。

💬 一般小白簡單版 Prompt (直接發送給 AI)
我有一個線上 ERP 測試網頁:https://falo-taiwan.github.io/class/a01/class3/cases/chrome_extension/erp.html。我想開發一個功能完整的 Chrome 瀏覽器外掛,外掛打開後在右側滑出側邊欄。側邊欄上包含 5 個 ERP 欄位(採購單號:#po-number、產品代碼:#product-code、進貨數量:#received-qty、產品效期:#expiry-date、進貨部門下拉選單:#dept-code)。此外,請為外掛加入以下功能:1. 點「隨機產生資料」按鈕,能在外掛欄位產生測試值(單號為 PO-2026-開頭,效期為今天台北時間)。2. 點「匯出 CSV」和「匯入 CSV」按鈕,可備份或還原 5 欄資料。3. 點「檢核表單」與「確認入庫」按鈕,可遙控點擊網頁對應按鈕(#btn-check-form, #btn-submit-entry)。4. 網頁入庫成功後,抓取網頁產生的流水號(#system-serial-no),自動幫我下載一個 txt 的入庫報告(檔名含時間戳記)。請幫我寫出完整的 Chrome 外掛程式碼。
⚡ 點此展開 ── 專家指點版完整 Prompt (精確代碼生成)
💬 複製以下結構化提示詞貼給 AI
🧪 進入 ── 實體外掛測試網頁 (erp.html) ➔
極簡乾淨的 ERP 採購單表單,學員安裝實體外掛後在此進行真實的 DOM 填單互動
📦 下載 ── Chrome 實體外掛資源包 (chrome_extension.zip) ➔
下載 Class03 專屬開發的外掛 V1.5 實體包,解壓縮後即可在 Chrome 中透過開發者模式載入

4. 附錄:V1 網頁外掛核心程式碼剖析

此處列出 V1 階段注入網頁的 Content Script 核心邏輯。學習者可以從代碼中看出「外掛如何透過遍歷 DOM 來理解網頁結構」:

// 遍歷 DOM,篩選頁面上所有的可輸入元素
function getFormFields() {
  return Array.from(
    document.querySelectorAll(
      'input:not([type="submit"]):not([type="hidden"]), select, textarea'
    )
  );
}

// 根據 DOM 階層與 ID/Name 屬性,計算出唯一的 CSS Selector 路徑
function getCSSSelector(el) {
  if (el.id) return `#${el.id}`;
  if (el.name) return `${el.tagName.toLowerCase()}[name="${el.name}"]`;
  
  // 向上遞歸父層
  const parent = el.parentElement;
  if (parent && parent.id) {
    return `#${parent.id} > ${el.tagName.toLowerCase()}`;
  }
  return el.tagName.toLowerCase();
}
✓ 已複製到剪貼簿!