<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Page-Agent on KnightLi的博客</title>
        <link>https://knightli.com/zh-tw/tags/page-agent/</link>
        <description>Recent content in Page-Agent on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Sun, 12 Jul 2026 12:14:00 +0800</lastBuildDate><atom:link href="https://knightli.com/zh-tw/tags/page-agent/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Page-Agent 怎麼讓 AI 操作網頁：嵌入式 GUI Agent、表單自動化與權限邊界</title>
        <link>https://knightli.com/zh-tw/2026/07/12/page-agent-in-page-gui-agent-form-automation-permission-guide/</link>
        <pubDate>Sun, 12 Jul 2026 12:14:00 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/2026/07/12/page-agent-in-page-gui-agent-form-automation-permission-guide/</guid>
        <description>&lt;p&gt;Page-Agent 的思路不同於讓 Agent 控制整台瀏覽器：它將 JavaScript 放進網頁，讓頁面本身擁有 GUI Agent。官方說明它以文字化 DOM 操作為主，不依賴截圖、多模態模型、Python 或 headless browser；多頁任務可選 Chrome 擴充功能，另有 Beta MCP Server。&lt;a class=&#34;link&#34; href=&#34;https://github.com/alibaba/page-agent&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;專案 README&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;它適合為 ERP、CRM、後台表單或內部工具加入「用一句話完成一串操作」的輔助能力，但不代表能繞過產品權限。Agent 的動作仍必須受既有鑑權、伺服器驗證與人工確認約束。&lt;/p&gt;
&lt;h2 id=&#34;page-agent-和瀏覽器自動化怎麼選&#34;&gt;Page-Agent 和瀏覽器自動化怎麼選
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;目標&lt;/th&gt;
          &lt;th&gt;較合適的方案&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;為自家 Web 產品內嵌自然語言助手&lt;/td&gt;
          &lt;td&gt;Page-Agent&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;回歸測試、跨站擷取、確定性腳本&lt;/td&gt;
          &lt;td&gt;Playwright 或 Puppeteer&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;讓 coding agent 檢查網路、主控台與效能&lt;/td&gt;
          &lt;td&gt;Chrome DevTools MCP&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;控制使用者真實 Chrome 並保留人工工作階段&lt;/td&gt;
          &lt;td&gt;browser-harness 一類工具&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;站內已有 &lt;a class=&#34;link&#34; href=&#34;https://knightli.com/zh-tw/2026/05/24/browser-harness-playwright-puppeteer-comparison/&#34; &gt;browser-harness、Playwright、Puppeteer 比較&lt;/a&gt;。Page-Agent 不取代測試框架，而是把操作能力做成產品功能交給使用者或外部 Agent。&lt;/p&gt;
&lt;h2 id=&#34;從-npm-設定最小實例&#34;&gt;從 NPM 設定最小實例
&lt;/h2&gt;&lt;p&gt;先安裝套件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install page-agent
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;再於前端入口建立實例。模型位址、金鑰與允許操作範圍應由伺服器或安全設定管理，不要把正式環境金鑰直接寫進瀏覽器程式碼。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ts&#34; data-lang=&#34;ts&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;PageAgent&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;page-agent&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;agent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;PageAgent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;qwen3.5-plus&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;baseURL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://your-compatible-api.example/v1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;apiKey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;USE_A_SCOPED_KEY&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;language&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;zh-CN&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;agent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;execute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;在当前页面找到“新建客户”按钮，但不要提交表单&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;上例只驗證 DOM 識別與按鈕定位。實際業務中，&lt;code&gt;apiKey&lt;/code&gt; 應改為短期、限額、可撤銷的方式；不可將萬用金鑰、使用者 token 或管理端憑證交給頁面腳本。&lt;/p&gt;
&lt;h3 id=&#34;建議接入順序先唯讀再草稿最後提交&#34;&gt;建議接入順序：先唯讀，再草稿，最後提交
&lt;/h3&gt;&lt;p&gt;先選權限低、欄位少的頁面，例如客戶清單篩選或工單草稿。第一階段僅開放定位元素、讀取可見文字與產生操作建議，並以測試資料驗證 Agent 能區分同名紀錄與不同狀態。此時不要開放儲存、上傳附件或跳轉外部網域。&lt;/p&gt;
&lt;p&gt;第二階段才允許填寫表單。把輸入限制成客戶 ID、折扣比例、有效期等結構化業務參數，而非只說「給張三打折」。前端應預覽 Agent 準備寫入的欄位；伺服器再依目前角色驗證欄位是否可寫、值是否在範圍內。確認後頁面才呼叫既有業務 API，不能讓 Agent 擁有繞過介面的後門。&lt;/p&gt;
&lt;p&gt;第三階段才考慮提交。提交必須走與人工按鈕相同的 API、稽核日誌與二次確認；成功後讀取物件 ID、版本與錯誤訊息並顯示。即使模型誤解自然語言，也會在預覽、權限或伺服器驗證其中一層被攔下。&lt;/p&gt;
&lt;h2 id=&#34;將任務拆成可稽核階段&#34;&gt;將任務拆成可稽核階段
&lt;/h2&gt;&lt;p&gt;表單自動化最常出錯的不是點擊，而是對象與副作用。建議拆成：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;查找&lt;/strong&gt;：只讀取目前頁面的可見欄位與候選紀錄。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;填入草稿&lt;/strong&gt;：只寫入本地表單，不提交、不上傳附件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;顯示差異&lt;/strong&gt;：將即將寫入的欄位和值交給使用者確認。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;提交&lt;/strong&gt;：只在使用者確認且伺服器權限驗證通過後執行。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;例如「替客戶 A 建立 20% 折扣」不應直接交給 Agent。較安全的做法是產生表單草稿、顯示客戶 ID、價格規則與有效期，再由有權限的人提交。&lt;/p&gt;
&lt;h3 id=&#34;將頁面能力收斂為動作白名單&#34;&gt;將頁面能力收斂為動作白名單
&lt;/h3&gt;&lt;p&gt;不要把所有 DOM 元素都當成可呼叫工具。可定義 &lt;code&gt;searchCustomer&lt;/code&gt;、&lt;code&gt;fillDiscountDraft&lt;/code&gt;、&lt;code&gt;previewDiscount&lt;/code&gt;、&lt;code&gt;submitDiscount&lt;/code&gt; 等業務動作，分別標示唯讀、可撤銷或有副作用。Agent 選擇動作，前端再執行對應互動；刪除、退款、邀請成員、匯出資料等高風險動作應不註冊，或永遠要求手動確認。&lt;/p&gt;
&lt;p&gt;每次執行都記錄使用者、頁面、動作、輸入摘要、結果與失敗原因。日誌須脫敏，不能保存完整金鑰、cookie 或客戶敏感欄位。出錯時，它能說明 Agent 看見什麼、提議什麼、最後由誰確認。&lt;/p&gt;
&lt;h2 id=&#34;登入多頁與-mcp-的邊界&#34;&gt;登入、多頁與 MCP 的邊界
&lt;/h2&gt;&lt;p&gt;Page-Agent 可以使用頁面既有登入狀態，但這不該成為擴大權限的理由。應避免：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;讓 Agent 從自然語言擷取或展示 cookie、密碼、驗證碼；&lt;/li&gt;
&lt;li&gt;讓它把登入後資料送往未審核的模型端點；&lt;/li&gt;
&lt;li&gt;用「自動化」略過二次確認、付款確認或角色審批；&lt;/li&gt;
&lt;li&gt;預設對所有使用者開放跨頁能力。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;官方 Chrome 擴充功能與 MCP Server 用於多頁或外部 Agent 控制時，尤其要建立網域白名單、動作白名單與稽核日誌。Beta 能力應先在測試環境驗證。&lt;/p&gt;
&lt;h2 id=&#34;上線前以真實任務驗收&#34;&gt;上線前以真實任務驗收
&lt;/h2&gt;&lt;p&gt;選三到五條客服或營運的低風險任務，例如篩選本週待跟進客戶、補齊指定工單草稿欄位、從訂單頁跳到客戶頁。每條都要準備成功、歧義、無權限樣本：成功樣本應走到預覽；歧義樣本必須追問或停止；無權限樣本必須由後端拒絕且不洩漏額外資料。&lt;/p&gt;
&lt;p&gt;不要只看 Agent 是否點到按鈕，也要檢查首次回應時間、失敗是否可理解、重新整理後草稿是否正確，以及斷網或模型逾時是否保留未提交資料。通過後再擴大頁面範圍。&lt;/p&gt;
&lt;h2 id=&#34;排錯清單&#34;&gt;排錯清單
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;問題&lt;/th&gt;
          &lt;th&gt;處理方式&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;找不到按鈕或欄位&lt;/td&gt;
          &lt;td&gt;檢查 DOM 是否動態渲染、元素是否在 iframe／遮罩層內，以及頁面文案是否穩定。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Agent 選錯紀錄&lt;/td&gt;
          &lt;td&gt;加入唯一 ID、唯讀預覽與結果回顯，避免只靠名稱比對。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;模型呼叫失敗&lt;/td&gt;
          &lt;td&gt;檢查相容 API、限額、CORS 與金鑰注入位置；不要在前端日誌輸出金鑰。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;表單已填但提交結果不對&lt;/td&gt;
          &lt;td&gt;將填表與提交拆開，提交後讀取並顯示伺服器回傳值。&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;小結&#34;&gt;小結
&lt;/h2&gt;&lt;p&gt;Page-Agent 的重點不是讓頁面聽懂一句話，而是將自然語言動作限制在可觀察、可撤銷、可審批的產品流程。先用唯讀查詢和草稿填寫驗證，再逐步開放有副作用的操作。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
