在瀏覽器自動化和自動化測試領域,Playwright 和 Puppeteer 是最常被拿來比較的兩個工具。它們都可以控制瀏覽器、點擊頁面、抓取內容、產生截圖或 PDF,也都和 Chrome DevTools Protocol 有很深關係。
但如果把 browser-use/browser-harness 放進來,問題就不只是「哪個測試框架更強」,而是變成兩類工具的對比:
Playwright/Puppeteer:面向人類工程師寫確定性腳本。browser-harness:面向 AI Agent 操作真實瀏覽器。
前者適合測試、爬蟲和工程化自動化;後者更像給 Claude Code、Codex CLI、Gemini 這類 Agent 準備的瀏覽器控制層。
Playwright 和 Puppeteer 的關係
Puppeteer 最早由 Google Chrome 團隊推出,天然服務於 Chromium 和 Chrome 自動化。它的 API 簡潔,生態成熟,特別適合圍繞 Chrome 做截圖、PDF、頁面抓取和輕量自動化。
Playwright 由 Microsoft 維護,背後團隊和早期 Puppeteer 有很深淵源。它吸收了 Puppeteer 的很多經驗,同時把跨瀏覽器、自動等待、上下文隔離、測試報告和調試工具鏈做得更完整。
簡單說:
- 只圍繞 Chrome 做輕量任務,
Puppeteer仍然很順手。 - 做跨瀏覽器 E2E 測試、複雜 SPA 自動化和團隊測試工程,
Playwright通常更合適。
核心區別總覽
| 維度 | Puppeteer | Playwright |
|---|---|---|
| 主導方 | Microsoft | |
| 瀏覽器支援 | 主要面向 Chrome / Chromium | Chromium、Firefox、WebKit |
| 語言支援 | 主要是 JavaScript / TypeScript | JavaScript / TypeScript、Python、Java、.NET |
| 自動等待 | 需要更多顯式等待 | Locator 和 auto-waiting 更完整 |
| 多上下文隔離 | 支援,但不是最突出的優勢 | BrowserContext 體驗很強 |
| 工具鏈 | 簡潔、成熟、偏基礎 | Codegen、Trace Viewer、測試報告更完整 |
| 典型場景 | Chrome 自動化、截圖、PDF、輕量抓取 | 跨瀏覽器 E2E 測試、複雜前端應用自動化 |
瀏覽器支援
Puppeteer 的優勢在 Chrome。它和 Chromium 結合緊密,如果你的目標就是控制 Chrome、產生 PDF、截圖、跑簡單爬蟲,Puppeteer 的心智負擔很低。
Playwright 的優勢在跨瀏覽器。它原生支援 Chromium、Firefox 和 WebKit。WebKit 這一點很關鍵,因為很多 Safari 相關問題不能只靠 Chrome 測出來。對需要覆蓋桌面端、行動端和不同瀏覽器核心的應用來說,Playwright 更適合作為主力工具。
這也是兩者選擇的第一道分界線:只看 Chrome,可以用 Puppeteer;要認真做跨瀏覽器測試,優先 Playwright。
自動等待與穩定性
瀏覽器自動化最煩人的問題,往往不是「不會點擊」,而是頁面還沒準備好。元素可能還沒掛到 DOM,可能被遮擋,可能正在動畫中,可能按鈕還是 disabled。
Puppeteer 裡經常會寫:
|
|
這沒有問題,但等待邏輯需要工程師自己想清楚。頁面越複雜,腳本裡越容易出現各種 waitForSelector、waitForTimeout 和重試邏輯。
Playwright 的 Locator 機制和自動等待更完整:
|
|
在點擊之前,Playwright 會自動檢查元素是否可見、可操作、穩定、沒有被遮擋,並在合理時間內重試。這對 React、Vue、Next.js 這類非同步渲染很多的現代 Web 應用尤其重要,可以明顯減少 flaky test。
多帳號和上下文隔離
如果你要模擬多個使用者,或者想讓多個任務共享同一個瀏覽器行程但隔離 Cookie、LocalStorage 和 Session,BrowserContext 就很重要。
Puppeteer 也支援上下文隔離,但 Playwright 把這件事做成了核心能力。你可以在一個瀏覽器實例裡快速建立多個獨立 context,每個 context 像一個乾淨的瀏覽器環境,卻不需要反覆啟動完整瀏覽器行程。
這對這些場景很有價值:
- 多帳號並發測試。
- 多角色協作流程測試。
- 電商、IM、協作文檔等多使用者場景。
- 需要隔離 Cookie 和登入狀態的爬取任務。
工具鏈差異
Playwright 是更工程化的方案。它內建了很多測試開發會用到的工具:
codegen:在網頁上操作,自動產生腳本。Trace Viewer:失敗後回看每一步的截圖、DOM、網路請求和 console 日誌。- Test Runner:支援斷言、並行、重試、報告和專案矩陣。
- Locator:支援按文字、角色、label、test id 等方式定位元素。
Puppeteer 則更像一個輕量瀏覽器控制庫。它不臃腫,API 直接,適合嵌入腳本、服務端任務和自定義自動化流程。
如果你要搭企業級測試體系,Playwright 的配套工具會省很多事。如果你只是要寫一個 Node.js 腳本,把網頁轉 PDF 或定時截圖,Puppeteer 反而更乾脆。
browser-harness 放在哪裡
browser-harness 和 Playwright、Puppeteer 不是同一類工具。
Playwright 和 Puppeteer 主要假設「人類寫腳本」。人類工程師要決定選擇器、等待條件、斷言邏輯和異常處理。它們追求的是確定性:同樣的腳本,在同樣的頁面狀態下,應該給出同樣的結果。
browser-harness 主要假設「AI Agent 操作瀏覽器」。它的目標不是提供一套巨大的高階 API,而是透過 CDP 連接真實 Chrome,把截圖、座標點擊、DOM、網路請求和 helper 暴露給 Agent。Agent 可以觀察頁面、判斷下一步、遇到缺能力時補 helper,再把站點經驗沉澱成 skill。
這就讓它更適合開放任務:
- 登入後台後下載帳單。
- 在內部系統裡填一組表單。
- 處理經常改版的 OA 或 SaaS 頁面。
- 按使用者目標探索頁面,而不是執行固定腳本。
- 讓 Claude Code、Codex CLI 這類工具擁有瀏覽器操作能力。
browser-harness 是什麼
從結構看,browser-harness 更像一個給 Agent 用的瀏覽器執行環境,而不是普通使用者手動點擊的瀏覽器外掛。
它的核心思路有幾個:
- 直接連接 Chrome 或 Chromium。
- 透過 CDP WebSocket 操作頁面。
- 讓 Agent 組合截圖、座標點擊、DOM、網路請求和原始 CDP 完成任務。
- 把任務相關 helper 放在
agent-workspace/agent_helpers.py。 - 把站點相關經驗沉澱到
agent-workspace/domain-skills/。 - 保持核心很薄,避免做成龐大的自動化平台。
README 提到,專案核心架構大約是 4 個核心檔案、約 1000 行程式碼,主要包括 install.md、SKILL.md、src/browser_harness/、agent-workspace/agent_helpers.py 和 agent-workspace/domain-skills/。
這種設計的重點不是內建所有網站能力,而是給 Agent 一個足夠貼近真實瀏覽器的操作層,讓它在具體任務裡補齊缺失能力。
它和傳統瀏覽器自動化有什麼不同
傳統瀏覽器自動化通常圍繞測試框架展開,例如 Playwright、Selenium 或 Puppeteer。它們適合寫確定性的測試腳本:打開頁面、定位元素、點擊、斷言結果。
browser-harness 面向的是另一類任務:使用者說一句目標,Agent 自己探索頁面、判斷狀態、處理彈窗、補 helper、複用站點經驗。它強調的是互動過程中的適應性。
差異可以這樣理解:
- Playwright 更適合人寫腳本,Agent 執行腳本。
- browser-harness 更適合 Agent 邊看頁面邊行動。
- 傳統自動化偏固定流程。
- browser-harness 偏開放任務。
- 傳統腳本常依賴選擇器。
- browser-harness 鼓勵先截圖、再按可見介面行動,必要時再回到 DOM 或 CDP。
這不表示它要取代 Playwright。對穩定測試來說,Playwright 仍然更成熟。browser-harness 的價值在於把真實網頁變成 Agent 可操作的環境,尤其適合頁面結構複雜、步驟不固定、需要臨場判斷的任務。
為什麼強調真實 Chrome
很多瀏覽器 Agent 工具會使用隔離的無頭瀏覽器。這樣部署簡單,也適合批量任務,但它有一個現實問題:使用者真實工作裡的登入狀態、擴充功能、歷史記錄、書籤和日常瀏覽器環境,不一定能直接複用。
browser-harness 支援連接本機 Chrome,也支援 Browser Use cloud browser。對本機瀏覽器,它提供兩種方式:
- 透過
chrome://inspect/#remote-debugging允許目前 Chrome 實例被連接。 - 用
--remote-debugging-port=9222 --user-data-dir=...啟動一個隔離 profile。
如果要讓 Agent 幫你處理真實帳號裡的任務,專案文件更傾向第一種方式,因為它能複用日常 Chrome 的登入狀態、擴充功能和書籤。如果要做無人值守自動化,或者不希望被彈窗打斷,則更適合使用隔離 profile 或雲瀏覽器。
這裡的取捨很清楚:真實瀏覽器更貼近使用者工作流,但安全邊界也更敏感;隔離瀏覽器更適合自動化,但需要重新處理登入和環境。
可編輯 helper 與 domain skills
browser-harness 最有意思的地方,是它把「Agent 會學到什麼」設計進了專案結構。
agent-workspace/agent_helpers.py 用來放任務中臨時補出的 helper。比如 Agent 做檔案上傳時發現現有能力不夠,可以補一個穩定的上傳函式;下次再遇到類似頁面,就不用從零開始。
agent-workspace/domain-skills/ 則用來放站點級經驗。README 裡舉的方向包括 LinkedIn outreach、Amazon 下單、報銷系統等。專案建議不要手寫這些 skill,而是讓 Agent 在真實任務中發現可重用流程後再生成,這樣更貼近實際頁面行為。
這個思路很適合瀏覽器自動化。因為網頁自動化的難點往往不是「怎麼點擊按鈕」,而是:
- 某個網站的登入後頁面怎麼跳轉。
- 哪些彈窗會擋住主流程。
- 哪些 selector 穩定,哪些只是臨時樣式名。
- 上傳、下載、iframe、shadow DOM、跨域元件怎麼處理。
- 某個後台系統有哪些隱藏等待和非同步狀態。
這些知識如果只留在一次執行日誌裡,很快就會丟掉。把它們沉澱成 domain skills,才可能讓 Agent 越用越順。
適合哪些場景
browser-harness 更適合以下任務:
- 幫使用者操作真實網頁後台。
- 在沒有 API 的系統裡完成重複流程。
- 登入狀態依賴強的個人或企業網頁任務。
- 需要截圖判斷頁面狀態的複雜互動。
- Agent 需要在執行中補工具、補站點經驗。
- 多個子 Agent 各自使用獨立瀏覽器執行任務。
- 研究瀏覽器 Agent 的執行環境設計。
具體例子包括:整理網頁表格、提交內部系統表單、下載帳單、上傳檔案、處理報銷流程、檢查訂單狀態、在 SaaS 控制台裡配置資源、從登入後的網頁提取資訊。
如果任務只是抓取靜態網頁,未必需要瀏覽器。專案自己的 SKILL.md 也提到,靜態頁面可以直接用 HTTP 批量取得;瀏覽器應該留給真正需要頁面狀態、登入狀態和互動的場景。
需要注意的風險
讓 AI Agent 接管真實 Chrome,很強,也很危險。
第一,權限邊界要清楚。真實 Chrome 裡可能有信箱、支付後台、雲控制台、公司系統和個人帳號。Agent 一旦能操作瀏覽器,就等於獲得了這些網頁權限的一部分。
第二,不要把憑證交給模型。遇到登入頁、支付驗證、二次確認等敏感步驟,應該讓使用者自己處理。Agent 可以等待登入完成,但不應該從截圖裡讀取或輸入密碼、驗證碼、支付資訊。
第三,自動化不等於可託管。很多網頁任務看似簡單,但中間可能出現風控、誤點擊、資料刪除、批量提交、不可逆操作。適合先從唯讀、低風險、可回復的流程開始。
第四,domain skills 需要避免洩露隱私。站點經驗可以公開,但不要把帳號、內部 URL、客戶資料、座標流水或一次性任務細節寫進去。
第五,真實瀏覽器連接方式要謹慎選擇。如果要複用日常登入狀態,使用目前 Chrome 很方便;如果要跑長時間自動化,隔離 profile 或雲瀏覽器更可控。
對 AI Agent 工具的意義
browser-harness 代表了一種很務實的 Agent 工具路線:少做平台,多給模型一個可以直接觸達真實環境的介面。
過去很多 Agent 失敗在兩端。一端是模型會推理,但摸不到真實頁面;另一端是自動化框架很強,但需要人先把流程寫死。browser-harness 試圖把這兩端接起來:瀏覽器負責真實世界的狀態,Agent 負責觀察、判斷和補工具。
這也是「自我改進 harness」的意義。它不是說 Agent 會神奇地變聰明,而是把可重用的操作經驗放到專案結構裡,讓下一次任務少走彎路。
對開發者來說,browser-harness 的價值主要在三個層面:
- 作為個人 Agent 的瀏覽器控制層。
- 作為研究瀏覽器自動化和 Agent 工作流的樣本。
- 作為把網頁流程變成可重用技能的實驗框架。
它不是所有瀏覽器自動化問題的答案,但它給出了一個清晰方向:當 Agent 真正要幫人做事時,工具層不只要能呼叫 API,也要能理解和操作人類每天使用的網頁介面。
domain skills 是什麼
可以把 domain skills 理解成「給 Agent 看的站點操作手冊」。
它不是普通的使用者文件,也不是一次性腳本。它更像一組經過實測的站點級知識:
- 這個站點適不適合用瀏覽器。
- 如果有 API,應該優先用哪個 API。
- 如果必須操作網頁,應該從哪個 URL 進入。
- 哪些 DOM 結構、aria-label、按鈕行為經過驗證。
- 哪些常見寫法會失敗。
- 哪些場景要停止並請求人類介入。
這類內容既能被人類審查,也能被 Agent 在任務中讀取。它把「臨場摸索」變成「可維護經驗」。
它不是讓 Agent 盲目點擊
一個好的瀏覽器 Agent,不應該把所有問題都變成打開網頁、看截圖、點按鈕。
domain skills 裡很重要的一類經驗,恰恰是在告訴 Agent:什麼時候不要用瀏覽器。
比如 ArXiv 這類站點,論文搜尋、元資料和摘要可以透過 Atom API 或 HTML meta 標籤直接拿到。用 HTTP 請求通常比打開瀏覽器更快、更穩,也更容易解析。
GitHub 也是類似思路。倉庫、使用者、release 資料優先用 REST API;檔案內容優先讀 raw.githubusercontent.com;只有 GitHub Trending 這類沒有等價 API 的頁面,才需要進入瀏覽器。
這說明 browser-harness 的思路不是「瀏覽器萬能」,而是把瀏覽器放在正確位置:當 API、HTTP、靜態頁面無法解決問題時,再讓 Agent 操作真實頁面。
它記錄的是站點級知識
傳統自動化腳本通常圍繞一次任務寫,比如:
|
|
這種腳本可以完成任務,但經驗很容易散落在程式碼裡。站點一改版,腳本失效;換一個任務,很多經驗也沒法重用。
domain skills 的粒度更接近站點級知識庫。它關心的是:
- Amazon 搜尋結果裡哪個容器選擇器穩定。
- GitHub 哪些資料應該走 REST API。
- LinkedIn 邀請管理頁的按鈕 aria-label 有什麼差異。
- Shopify Admin 裡哪些頁面是嵌入式 app。
- Shopify Polaris 輸入框為什麼不能只用普通 JS 設定 value。
- Browser Use Cloud 的瀏覽器實例如何建立、列出和清理。
這些經驗不是一次任務的步驟,而是以後很多任務都會用到的判斷依據。
例子:Amazon 商品搜尋
Amazon 商品搜尋的經驗,重點不只是「怎麼搜尋商品」,而是哪些路徑更穩定。
比較可靠的做法是直接使用搜尋 URL,而不是每次都打開首頁再模擬輸入。搜尋結果可以從 [data-component-type="s-search-result"] 這樣的容器中提取。欄位提取也有細節:標題、價格、評分、評論數、是否贊助,都有各自更穩的 DOM 來源。
這種經驗對 Agent 很有價值。沒有它時,Agent 可能會從截圖裡猜按鈕、反覆嘗試選擇器;有了它之後,Agent 可以直接進入更穩定的資料提取路徑。
更重要的是,這類 skill 還會記錄陷阱。例如某些看似可用的選擇器,在贊助結果或交叉推薦區域裡會誤讀。這種坑只有實測過才知道。
例子:LinkedIn 邀請管理
LinkedIn 這類站點更接近真實帳號工作流,風險也更高。
在邀請管理頁裡,Accept 和 Ignore 按鈕的 aria-label 格式不同,不能簡單地從一個推導另一個。有些邀請卡片裡的 Accept 控件甚至不是 <button>,而是 <a>,普通 CDP 點擊不一定能觸發接受動作。
這種細節說明,真實網頁自動化不是「定位到元素就結束」。按鈕標籤、事件綁定、軟導航、元件實作方式,都會影響操作是否真的生效。
對 Agent 來說,這類經驗還有一個安全含義:涉及社交帳號、邀請、消息、發文的操作,不應該完全託管。skill 可以記錄路徑和陷阱,但批量接受邀請、對外發送內容、修改帳號資料這類動作,最好保留人工確認。
例子:Shopify Admin
Shopify Admin 的經驗說明了另一個問題:後台系統往往不是一個頁面,而是一堆嵌入式應用和複雜元件的組合。
很多 Shopify app 會運行在 iframe 裡。Polaris React 輸入框、Web Components、嵌入式 app 的互動方式也不同。某些輸入框不能只用 element.value = ...,需要使用更接近真實鍵盤輸入的 CDP keystrokes。
這類 skill 的價值在於,它讓 Agent 先判斷目前頁面屬於哪類 UI,再選擇合適的操作方式。
同時,Shopify 的經驗也強調「能不用瀏覽器就不用瀏覽器」:
- 唯讀商品和庫存資料,優先用 Storefront API。
- 有 Admin API token 時,優先用 Admin API。
- 編輯主題程式碼時,優先用 Shopify CLI。
- 只有沒有 API、一次性設定、探索後台時,才適合讓瀏覽器介入。
這才是成熟的 Agent 工具選擇邏輯。
例子:Browser Use Cloud
domain skills 不只服務網頁點擊,也可以記錄圍繞瀏覽器執行環境的 API 經驗。
Browser Use Cloud 的經驗裡,會記錄如何透過 REST API 建立 cloud browser、列出正在運行的瀏覽器、清理 zombie browser、取得 liveUrl 和 cdpUrl 等資訊。
這說明 skill 的邊界並不侷限於「某個網頁按鈕怎麼點」。只要某類任務會反覆出現,而且有穩定做法,就可以沉澱成 skill:
- API 呼叫方式。
- 鑑權頭格式。
- 請求和回應結構。
- 已驗證狀態碼。
- 常見失敗模式。
- 清理和回收資源的方法。
對 Agent 來說,這些都是可重用能力。
為什麼這比臨場推理更可靠
很多人期待大模型每次都能「自己看懂網頁」。但真實任務裡,只靠臨場推理並不穩定。
原因很簡單:
- 網頁 UI 經常變化。
- 同一按鈕可能有多種實作。
- 看得見不代表點得動。
- 能點擊不代表操作真的生效。
- 有些任務本來就應該用 API,而不是瀏覽器。
- 有些操作需要人類確認,不能讓模型自己決定。
domain skills 把這些經驗寫成文件後,有幾個好處:
- 人類可以 review。
- 錯誤經驗可以修正。
- 同一站點的經驗可以持續積累。
- 新 Agent 可以直接繼承舊經驗。
- 臨時任務發現可以變成長期知識。
這比把一切都塞進 prompt 或聊天上下文更穩。
團隊可以怎麼用
如果把 browser-harness 用在團隊裡,domain skills 可以變成一種輕量自動化知識庫。
比較適合沉澱的內容包括:
- 內部後台的登入後路徑。
- 報表匯出流程。
- 常見彈窗處理方式。
- 哪些按鈕需要人工確認。
- 哪些頁面有 API 替代方案。
- 哪些選擇器經過實測可靠。
- 哪些任務不允許 Agent 自動執行。
這類知識不必一開始就很完整。更實際的做法是從低風險、高頻、可回復的流程開始:先讓 Agent 做唯讀、下載、整理、檢查類任務。等流程穩定後,再把經驗整理成 skill。
對團隊管理者來說,skill 文件還有一個好處:它讓自動化邊界變得可見。你可以審查 Agent 知道什麼、能做什麼、應該停在哪裡。
需要注意的邊界
domain skills 能提高 Agent 成功率,但它不應該讓高風險操作完全自動化。
幾個邊界要守住:
- 不記錄密碼、Cookie、token、客戶資料和內部敏感 URL。
- 支付、刪除、批量提交、帳號變更、對外發布內容,要保留人工確認。
- skill 要寫明驗證日期和適用範圍。
- 站點改版後,要允許 skill 失效並重新驗證。
- 不要把繞過風控、規避平台限制當成目標。
換句話說,domain skill 是讓 Agent 更穩,不是讓 Agent 無限制地做事。
三者核心對比
| 維度 | Puppeteer | Playwright | browser-harness |
|---|---|---|---|
| 面向對象 | 人類工程師 | 人類工程師和測試團隊 | AI Agent |
| 主要目標 | 控制 Chrome | 穩定跨瀏覽器自動化 | 讓 Agent 操作真實瀏覽器 |
| 腳本方式 | 手寫 JS/TS 自動化 | 手寫腳本 + 測試框架 | 使用者下目標,Agent 分步執行 |
| 元素定位 | CSS、XPath、DOM API | Locator、文字、角色、CSS | 截圖視覺、座標、DOM、CDP |
| 等待機制 | 更多手動控制 | 自動等待很強 | 由 Agent 觀察和調整 |
| 瀏覽器環境 | 通常啟動自動化瀏覽器 | 通常啟動測試瀏覽器 | 常連接真實 Chrome |
| 最適合 | Chrome 腳本、截圖、PDF、輕量抓取 | E2E 測試、跨瀏覽器驗證、複雜 SPA | AI 助手、開放網頁任務、真實帳號工作流 |
程式碼體感對比
Puppeteer 更像直接控制 Chrome:
|
|
Playwright 更強調 Locator 和自動等待:
|
|
browser-harness 的使用體感則完全不同。你通常不是寫完整腳本,而是在 Agent 環境裡下達目標:
|
|
Agent 會借助 browser-harness 反覆執行類似流程:
- 截圖,理解目前頁面。
- 點擊某個座標或定位某個元素。
- 輸入文字、上傳檔案、下載檔案。
- 遇到彈窗時判斷如何關閉。
- 缺少 helper 時補充程式碼。
- 把可重用流程沉澱為 domain skill。
這不是傳統測試腳本的寫法,而是瀏覽器 Agent 的工作方式。
怎麼選
選擇 Puppeteer,通常是因為:
- 專案主要跑在 Node.js 裡。
- 只需要 Chrome 或 Chromium。
- 任務是截圖、PDF、簡單頁面抓取或輕量自動化。
- 你希望 API 簡潔、依賴少,自己控制更多細節。
- 你對 Chrome DevTools Protocol 有較深依賴。
選擇 Playwright,通常是因為:
- 你要做標準 UI 自動化或 E2E 測試。
- 需要覆蓋 Chromium、Firefox 和 WebKit。
- 團隊主語言可能是 Python、Java 或 C#。
- 頁面是複雜 SPA,非同步狀態多,容易出現 flaky test。
- 你需要 codegen、Trace Viewer、測試報告和並行測試。
選擇 browser-harness,通常是因為:
- 你在開發或使用 AI Agent。
- 你希望模型像人一樣操作真實瀏覽器。
- 任務步驟不固定,需要邊看頁面邊判斷。
- 目標網站經常改版,或者彈窗、iframe、shadow DOM 很多。
- 你想把真實網頁工作流交給 Claude Code、Codex CLI 等工具處理。
簡單結論
Playwright 和 Puppeteer 是瀏覽器自動化工具,核心是讓人寫出可靠腳本。兩者相比,Puppeteer 更輕、更貼近 Chrome;Playwright 更完整、更適合跨瀏覽器測試和複雜前端應用。
browser-harness 則是另一個方向:它不是為了取代 Playwright 或 Puppeteer 寫測試,而是為了讓 AI Agent 接管真實瀏覽器。它犧牲了一部分傳統腳本的確定性,換來更強的開放任務適應能力。
所以答案不是三選一,而是按任務分層:
- 測試工程:優先 Playwright。
- Chrome 輕量腳本:Puppeteer 很合適。
- AI Agent 上網辦事:看 browser-harness。
參考資料:
- browser-use/browser-harness:https://github.com/browser-use/browser-harness
- Playwright 官方文件:https://playwright.dev/
- Puppeteer 官方文件:https://pptr.dev/
- Chrome DevTools Protocol:https://chromedevtools.github.io/devtools-protocol/