週二早上,三個瀏覽器分頁的深淵
早上九點。產品主管說中午之前要一份最新的競品定價比較。你打開三個瀏覽器分頁 — 每個競品的定價頁一個。你滾動。你把數字複製到試算表。你發現其中一家上個月改了方案。你回去重新確認,然後發現漏掉了藏在「聯繫銷售」按鈕後面的企業方案。你從頭來過。
兩小時後你有了一張比較表。一週內就會過時。下週二,整個流程再來一次。
大多數團隊就是這樣做競品情報的。手動、慢、而且結果的保鮮期跟生魚片差不多。一個產品經理追蹤五個競品的定價、功能和更新紀錄,每週花三到五小時在本質上是機械性的工作:開一個 URL、找到對的數字、複製到表格、重複。
有更好的做法。一個帶無頭瀏覽器的 AI agent 可以自動拜訪每個競品頁面、把你要的資料精確抽取成結構化格式,而且可以平行處理所有競品。三個競品在兩分鐘內分析完,不是兩小時。整個流程在你的 terminal 裡跑,而且你可以排程讓它每週一早上自動執行,完全不用碰瀏覽器。
本文走過完整的設定步驟。具體範例是比較三個 AI CLI 工具的定價頁 — Claude Code、Gemini CLI 和 Codex CLI — 但這個 pattern 適用於任何競品分析場景。
你需要什麼
工具:
- Claude Code — 負責執行分析的 AI agent。需要 Claude 訂閱(Pro $20/月起)。各 AI CLI 工具的完整比較在 2026 AI CLI 工具完全指南。
- Playwright MCP server — 讓 Claude Code 透過無頭 Chromium 瀏覽器瀏覽網頁。MCP 是 Model Context Protocol 的縮寫 — 它是讓 AI agent 存取外部工具的標準協議。不需要另外安裝 Playwright,MCP server 會處理。
- Termdock(建議) — 用來同時跑多個 agent session。單一 agent 用任何 terminal 都行。
時間: 初次設定 15 分鐘。之後每次分析不到 10 分鐘。
步驟一:設定 MCP Server 的網頁瀏覽能力
Claude Code 本身不會瀏覽網頁。它需要一個 MCP server 把瀏覽器操作暴露為可呼叫的工具 — 想像成給 agent 一雙手來點擊、一雙眼睛來讀網頁。
Playwright MCP server 啟動一個無頭 Chromium 實例,提供 navigate、snapshot、click 和 evaluate(在頁面上執行 JavaScript)等工具。
在你的專案 .mcp.json 中加入:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@anthropic-ai/mcp-playwright@latest"],
"env": {
"DISPLAY": ""
}
}
}
}
或設定在 ~/.claude/mcp.json 讓所有專案都能使用網頁瀏覽功能。
啟動 Claude Code 並要求它瀏覽任意 URL 來驗證:
claude
> Navigate to https://example.com and tell me the page title
如果 Claude Code 回傳了頁面標題,就沒問題了。如果它說找不到瀏覽器工具,檢查 npx 能不能找到 @anthropic-ai/mcp-playwright 套件,以及防火牆有沒有擋住 Chromium 的對外連線。
步驟二:定義抽取 Schema
有用的競爭情報和一堆雜亂文字之間的差距,就在一件事:你在開始抽取之前就決定好要抽什麼。這就是 schema 的意義。
定價比較的 schema 長這樣:
## 抽取 Schema:定價頁
針對頁面上找到的每個定價層級,抽取:
- **層級名稱**(例如「Pro」「Enterprise」)
- **月費**(美元,月繳)
- **年費**(美元,年繳折算月均)
- **用量限制**(請求數、token、席位 — 看單位是什麼)
- **主要包含功能**(列出前 5 個差異化功能)
- **主要未包含功能**(相較更高層級的顯著缺失)
- **免費層級細節**(如果有的話)
- **最後驗證日期**(今天的日期)
輸出為 markdown 表格,每個層級一列。
把這個存為 schemas/pricing-comparison.md。你會在 agent prompt 中引用它。Schema 獨立成檔案代表你可以不改 prompt 就切換 — 功能比較用 schemas/feature-comparison.md,更新追蹤用 schemas/changelog-tracker.md。同一個引擎,換不同燃料。
步驟三:撰寫 Agent Prompt
Prompt 告訴 agent 怎麼用瀏覽器工具和 schema。以下是單一競品分析的 prompt:
你是競爭情報分析師。你的任務:
1. 用 playwright 瀏覽器工具導航到指定 URL
2. 對頁面做 snapshot 了解結構
3. 按照下方 schema 抽取定價資訊
4. 如果定價頁連結到子頁面(例如「查看完整功能比較」),
導航過去並抽取額外資料
5. 輸出結果為結構化 markdown 表格
## 抽取 Schema
[schemas/pricing-comparison.md 的內容]
## 目標
- 公司:{COMPANY_NAME}
- URL:{PRICING_URL}
## 規則
- 只抽取頁面上可見的資料。不推測、不猜測。
- 如果某個資料點不存在,寫「未列出」而非猜測。
- 在輸出中包含每個資料點的來源 URL。
步驟四:執行單一競品分析
在擴展到平行執行之前,先用一個競品測試。先做 prototype,再 scale。
claude --prompt "$(cat <<'EOF'
你是競爭情報分析師。用 playwright 瀏覽器工具
導航到 https://claude.ai/pricing 並抽取所有定價層級資訊。
針對每個層級,抽取:
- 層級名稱
- 月費(美元)
- 用量限制(每個時段訊息數、功能)
- 主要包含功能(前 5 項)
輸出為乾淨的 markdown 表格。只包含頁面上可見的資料。
EOF
)"
Claude Code 會:
- 透過 Playwright MCP server 啟動無頭瀏覽器
- 導航到定價 URL
- 對頁面做 snapshot 了解 DOM 結構
- 抽取定價資料
- 格式化並回傳 markdown 表格
單頁抽取通常需要 30-60 秒。有動態內容的頁面(JavaScript 渲染的定價計算器、互動式滑桿)會更久,因為 agent 可能需要跟 UI 元素互動才能看到所有層級。
處理動態內容
有些定價頁把真正的價格藏在分頁、切換或「顯示更多」按鈕後面,得點兩層才看得到。Playwright MCP server 的 click 工具處理這個:
導航到頁面後:
1. Snapshot 頁面
2. 如果有「月繳」和「年繳」的分頁,點擊每個分頁並抽取兩組價格
3. 如果有「查看所有功能」或「比較方案」的連結,點擊並抽取完整的功能矩陣
你描述要找什麼。Agent 決定要點擊哪些元素。就像跟研究助理說「年繳價格也幫我抓一下」,而不是自己寫 CSS selector。
步驟五:擴展到平行執行
一次處理一個競品已經比手動快了。三個競品同時跑,數學完全不一樣。
平行模式
開三個 terminal 面板。在 Termdock 中,把視窗分成三個垂直面板。在每個面板中,啟動一個 Claude Code session 針對不同競品:
面板 1 — Claude Code 定價:
claude --prompt "分析 https://claude.ai/pricing 的定價。抽取所有層級、\
價格、用量限制和主要功能。輸出為 markdown 表格。" \
> output/claude-code-pricing.md
面板 2 — Gemini CLI 定價:
claude --prompt "分析 https://ai.google.dev/gemini-api/docs/pricing 的定價。\
抽取所有層級、價格、速率限制和主要功能。輸出為 markdown 表格。" \
> output/gemini-cli-pricing.md
面板 3 — Codex CLI 定價:
claude --prompt "分析 https://openai.com/chatgpt/pricing/ 的定價。\
抽取所有層級、價格、用量限制和主要功能。輸出為 markdown 表格。" \
> output/codex-cli-pricing.md
三個 agent 同時跑。每個啟動自己的無頭瀏覽器實例,導航到目標 URL,獨立抽取資料。實際花費時間:三個加起來 1-2 分鐘,對比依序執行的 6-10 分鐘。
為什麼平行 Agent 需要獨立面板
每個 Claude Code session 維護自己的 MCP server 連線和瀏覽器實例。它們不共享狀態。這是特性,不是限制。共享 cookie 或快取的瀏覽器 session 會在競品之間洩漏狀態 — 想像一個 session 的登入 token 跑進另一個。隔離的 session 保證乾淨的抽取。
實際需求:每個 agent 需要一個 terminal。像 Termdock 這樣的 terminal multiplexer 讓這件事變得可管理。你在一個視窗中看到所有三個 agent 同時工作、即時抓到錯誤、如果某個網站暫時掛掉就重跑那一個 agent — 不影響其他的。
步驟六:合併與比較
三個 agent 都完成後,你有了個別的 markdown 檔案。最後一哩路是把它們餵回一個 agent 做跨競品比較:
claude --prompt "$(cat <<'EOF'
我有三份競品定價分析。比較它們並產出:
1. 統一的比較表,所有競品為欄位
2. 三種開發者類型的「最佳性價比」建議:
- 獨立開發者,預算有限
- 專業開發者,中度使用
- 團隊負責人,跨多專案重度使用
3. 關鍵差異化:每個工具有什麼是其他工具沒有的?
## 競品資料
### Claude Code
$(cat output/claude-code-pricing.md)
### Gemini CLI
$(cat output/gemini-cli-pricing.md)
### Codex CLI
$(cat output/codex-cli-pricing.md)
EOF
)" > output/competitive-comparison.md
輸出是一份文件,包含:
- 標準化的比較表格(所有價格統一格式、相同的層級分類)
- 定性分析(差異化因素、缺口、定位)
- 針對每種使用者類型的可行動建議
這就是你會寄給產品團隊、放進策略文件、或用來做定價決策的交付物。花了五分鐘,不是五小時。
變成每週可重複執行的任務
跑一次的競品分析很有用。每週一早上你倒咖啡時自動跑完的競品分析是策略優勢。
自動化腳本
#!/bin/bash
# weekly-competitive-analysis.sh
# 執行方式:bash weekly-competitive-analysis.sh
set -euo pipefail
DATE=$(date +%Y-%m-%d)
OUTPUT_DIR="competitive-intel/$DATE"
mkdir -p "$OUTPUT_DIR"
COMPETITORS=(
"Claude Code|https://claude.ai/pricing"
"Gemini CLI|https://ai.google.dev/gemini-api/docs/pricing"
"Codex CLI|https://openai.com/chatgpt/pricing/"
)
SCHEMA=$(cat schemas/pricing-comparison.md)
# 階段一:平行抽取
PIDS=()
for entry in "${COMPETITORS[@]}"; do
IFS='|' read -r name url <<< "$entry"
slug=$(echo "$name" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
claude --prompt "你是競爭情報分析師。\
用 playwright 瀏覽器工具導航到 $url。\
按照此 schema 抽取定價資料:$SCHEMA \
公司:$name。輸出為 markdown。" \
> "$OUTPUT_DIR/${slug}-raw.md" &
PIDS+=($!)
done
# 等待所有抽取完成
for pid in "${PIDS[@]}"; do
wait "$pid"
done
echo "抽取完成。合併中..."
# 階段二:合併與比較
COMBINED=""
for entry in "${COMPETITORS[@]}"; do
IFS='|' read -r name url <<< "$entry"
slug=$(echo "$name" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
COMBINED+="### $name\n$(cat "$OUTPUT_DIR/${slug}-raw.md")\n\n"
done
claude --prompt "比較這些競品定價分析。\
產出統一比較表和關鍵差異化因素。\
資料:$COMBINED" \
> "$OUTPUT_DIR/comparison-report.md"
echo "報告已儲存到 $OUTPUT_DIR/comparison-report.md"
排程執行
加到 crontab,每週一早上自動跑:
# 每週一早上 8:00 執行競品分析
0 8 * * 1 cd /path/to/project && bash weekly-competitive-analysis.sh
或者如果你偏好手動觸發,建立一個 alias:
alias comp-analysis='cd /path/to/project && bash weekly-competitive-analysis.sh'
追蹤跨週變化
每次執行都存到日期標記的目錄。偵測兩週之間有什麼改變:
diff competitive-intel/2026-03-15/comparison-report.md \
competitive-intel/2026-03-22/comparison-report.md
或者請 Claude Code 用白話摘要差異:
claude --prompt "比較這兩份每週競品報告,標出什麼改變了:\
定價更新、新層級、移除的功能、定位轉變。\
\
3 月 15 日那週:$(cat competitive-intel/2026-03-15/comparison-report.md) \
\
3 月 22 日那週:$(cat competitive-intel/2026-03-22/comparison-report.md)"
這給你一份競品動態的 changelog — 價格變動、新層級、功能新增 — 不用自己每頁去看。幾個月下來,這些 diff 累積成你的競爭版圖時間軸。
延伸到定價以外的場景
Pattern 不變,不管你抽的是什麼。換 schema 和 URL 就好,其他都一樣。
功能比較: 把 schema 改成抽取功能列表、整合支援、平台可用性。把 agent 導航到功能頁而不是定價頁。
更新紀錄監控: 把 agent 指向 /changelog 或 /releases 頁面。抽取日期、版本號和功能描述。跟上週的抽取結果做 diff,看看對手出了什麼貨。
徵才分析: 抓取競品的職缺頁面,了解他們的招聘重點。一家公司突然發了五個 ML 工程師職缺,那就是在公開宣布之前就釋放策略轉向的訊號。
文件深度: 計算競品文件的頁數、章節數和 code example 數。文件品質和開發者採用率正相關。一個競品的 code example 是你的兩倍,那它在 onboarding 的戰場上正在贏。
每種變體只需要一個新的 schema 檔案和更新的 URL。抽取、平行執行和比較的 pipeline 維持不變。
實際限制和對策
速率限制: 有些網站會擋快速的自動請求。Playwright MCP server 的行為像真實瀏覽器 — 它跑的是完整的 Chromium,帶真實的 user agent — 能避開多數的機器人偵測。如果你真的碰到速率限制,在 prompt 中加入指令:「每次換頁之間等 3 秒。」
JavaScript 密集頁面: 動態渲染定價的 SPA 完全沒問題。Chromium 會完整執行 JavaScript。Agent 可以等元素渲染完成再抽取資料。
登入限制內容: 如果競品資料需要認證,你可以在 Playwright session 中預設 cookie,或讓 agent 執行登入流程。這比較脆弱,而且需要維護帳號密碼 — 只在資料真的在登入牆後面時才用。
準確度驗證: AI 抽取不是萬無一失的。重大商業決策的資料,記得抽檢抽取結果和實際頁面。Agent 在輸出中包含了來源 URL,就是為了這個目的。信任,但要驗證。
工作流總結
| 步驟 | 做什麼 | 時間 |
|---|---|---|
| 1. 設定 MCP | 一次性的 Playwright MCP 設定 | 5 分鐘(一次) |
| 2. 定義 schema | 撰寫你的使用場景的抽取 schema | 10 分鐘(一次) |
| 3. 平行抽取 | N 個 agent 同時抓 N 個競品 | 1-2 分鐘 |
| 4. 合併比較 | 一個 agent 綜合所有資料 | 1-2 分鐘 |
| 5. 檢查輸出 | 抽查比較表 | 2-3 分鐘 |
| 每次執行合計 | 5-7 分鐘 |
對比手動工作流:每次分析 2-5 小時,結果在你完成前就過時了,而且沒有結構化的方式看跨週變化。
放在更大的脈絡中
競品分析只是一個 workflow。AI Agent 工作流指南涵蓋完整的 terminal 自動化模式 — 從每日站會報告到資料分析 pipeline 到多 agent code review。每一個都遵循相同的結構:定義任務、設定工具、讓 agent 平行執行、merge 結果。
這個 workflow 的運行成本很低。三個 Claude Code session 各抽取一個頁面,只用掉你每日訊息額度的一小部分。如果你在意成本,AI CLI 工具省錢工作流說明了如何根據複雜度把不同任務路由到不同工具。針對競品分析這個場景,Claude Code 的 structured output 品質值得這個成本 — 免費 AI CLI 工具排行列出了免費替代方案供你實驗。
平行執行模式 — 多個 agent,每個處理一個競品,全部同時跑 — 就是 Termdock 發揮價值的地方。把 terminal 分成三個面板、在每個裡面啟動一個 agent、看著三個同時抽取資料。一個原本吃掉你整個週二早上的任務,現在在你第一杯咖啡還沒喝完就跑完了。試一次。你不會想回到分頁和試算表的。
Ready to streamline your terminal workflow?
Multi-terminal drag-and-drop layout, workspace Git sync, built-in AI integration, AST code analysis — all in one app.