<?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/ja/tags/page-agent/</link>
        <description>Recent content in Page-Agent on KnightLiブログ</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja</language>
        <lastBuildDate>Sun, 12 Jul 2026 12:14:00 +0800</lastBuildDate><atom:link href="https://knightli.com/ja/tags/page-agent/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Page-Agent で AI に Web ページを操作させる方法：組み込み GUI Agent、フォーム自動化、権限境界</title>
        <link>https://knightli.com/ja/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/ja/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、管理画面、社内ツールに「一言で一連の操作を行う」支援を加える用途に適しています。ただし、製品の権限を回避するものではありません。すべての操作は既存の認可、サーバー側検証、人による確認に従う必要があります。&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 に network、console、performance を調べさせる&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/ja/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;フロントエンドの入口でインスタンスを作成します。モデル URL、キー、許可する操作範囲はサーバー側またはセキュリティ設定で管理し、本番キーをブラウザコードへ直接書かないでください。&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;最初は顧客一覧の絞り込みやチケット下書きなど、低権限で項目の少ないページを選びます。第1段階では、要素の特定、可視テキストの読み取り、操作提案だけを許可し、テストデータで同名レコードや状態を区別できるか確認します。保存、添付アップロード、外部ドメイン遷移はまだ許可しません。&lt;/p&gt;
&lt;p&gt;第2段階でフォーム入力を許可します。顧客 ID、割引率、有効期限など構造化した業務パラメータに限定し、「張三に割引を付ける」だけの曖昧な入力にはしません。フロントエンドは書き込む予定の項目をプレビューし、サーバーは現在のロールで編集可能か、値が範囲内かを再検証します。確認後に既存 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;ログイン後データを未審査のモデル endpoint に送ること。&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;「今週フォローが必要な顧客を絞る」「指定チケットの下書き項目を補う」「注文から顧客ページへ移動する」など、低リスクの実タスクを3～5件選びます。成功、曖昧、権限なしの例を用意します。成功はプレビューまで、曖昧な場合は質問または停止、権限なしは追加情報を漏らさずバックエンドが拒否しなければなりません。&lt;/p&gt;
&lt;p&gt;正しいボタンを押せたかだけでなく、初回応答時間、失敗の説明可能性、更新後の下書き、ネットワーク断やモデル timeout 時の未送信データも確認します。通過してから対象ページを広げます。&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;動的レンダリング、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>
