使用說明書 · Field Manual 2026
github.com/jo-inc/camofox-browser · MIT
C
反偵測無頭瀏覽器 · REST API · for AI Agents

讓 AI 代理
真的瀏覽得了真實網路。

camofox-browser 是一個反偵測的無頭瀏覽器伺服器,核心是 Camoufox——一個在 C++ 層級偽裝指紋的 Firefox fork。它把這顆引擎包成 REST API,作為 Puppeteer/Playwright 的替代品:回傳精簡的 accessibility snapshot 而非臃腫 HTML、用穩定的 element ref 點擊、內建常見網站的搜尋巨集,目標是讓代理繞過 Cloudflare 與機器人偵測。本手冊依官方 README 整理安裝、能力、OpenClaw 外掛工具、實作範例與邊界。

6.4k
GitHub Stars
~90%
snapshot 比 HTML 更小
9377
預設埠
MIT
開源授權
01
這到底是什麼

一台反偵測
無頭瀏覽器伺服器

camofox-browser 解決一個具體問題:AI 代理需要瀏覽真實網路,但 Playwright 會被擋、headless Chrome 會被指紋辨識、stealth 外掛本身又成了新的指紋。它的答案是換引擎——底層用 Camoufox,一個在 C++ 實作層偽裝指紋的 Firefox fork。navigator.hardwareConcurrency、WebGL renderer、AudioContext、螢幕幾何、WebRTC 都在 JavaScript 看到之前就被改掉,沒有 shim、沒有 wrapper、沒有破綻。

這個專案把那顆引擎包成一套為代理設計的 REST API。它不回傳整頁 HTML,而是回傳 accessibility snapshot——體積約比原始 HTML 小 90%,對 token 友善;頁面元素以穩定的 e1e2e3 ref 標記,代理據此點擊與輸入;並內建 @google_search 等搜尋巨集處理常見網站。定位是 Puppeteer/Playwright 的 drop-in 替代品。

它由 AI 代理產品「jo」團隊維護,以 MIT 授權釋出,目前約 6.4k stars、638 forks,主要語言 JavaScript。設計上強調輕量:lazy 啟動加上閒置自動關閉,閒置時記憶體約 40MB,可與其他服務共用一台 Raspberry Pi 或 5 美元 VPS。

camofox 的請求循環
開 tab 取 snapshot 用 ref 點擊/輸入 擷取結果 關 session
Playwright gets blocked. Headless Chrome gets fingerprinted. Stealth plugins become the fingerprint.
— camofox-browser README · 為什麼要換引擎
02
安裝

三條安裝路徑:
npx、原始碼、或 Docker。

最快是直接用 npx 跑起來;要改原始碼就 clone。第一次啟動會下載 Camoufox 二進位檔(約 300MB),之後啟動就快。伺服器預設聽 9377 埠。

# 直接用 npx 啟動(不需 clone) npx @askjo/camofox-browser # 或從原始碼;npm start 首次會下載 Camoufox(約 300MB) git clone https://github.com/jo-inc/camofox-browser cd camofox-browser npm install npm start # -> http://localhost:9377

當成 OpenClaw 外掛

若你的代理用 OpenClaw,直接裝外掛即可,它會註冊一組 camofox_* 工具(見第 04 節)。

openclaw plugins install @askjo/camofox-browser

Docker

內附的 Makefile 會自動偵測 CPU 架構(M1/M2 為 aarch64、Intel 為 x86_64),並在 build 之外預先下載 Camoufox 與 yt-dlp 二進位檔,讓重建快很多(約 30 秒 vs 約 3 分鐘)。

make up # 自動偵測架構、build 並啟動 make down # 停止並移除容器 make reset # 升級版本後強制重建 make fetch # 只下載二進位檔
別直接跑 docker buildDockerfile 用 bind mount 從 dist/ 取預先下載好的二進位檔,直接 build 會失敗。一律用 make up(或先 make fetchmake build)。要部署到 Fly.io / Railway 等遠端 CI,改用會在 build 階段下載二進位的 Dockerfile.ci;repo 已附 railway.toml,會把 Railway 的 PORT 對應到 CAMOFOX_PORT
03
能力總覽

API 提供的
每一項能力。

以下依用途分組,整理 README 列出的核心能力。左區是讓代理「不被擋、看得懂、點得到」的瀏覽基礎;中區是登入與代理路由;右區是資料擷取與可觀測性。每一項都對應 README 中已記載的功能。

隱匿 · 01
C++ Anti-Detection
繞過偵測
在 C++ 實作層偽裝指紋,JavaScript 看到前就改好。README 稱可繞過 Google、Cloudflare 與多數機器人偵測。
互動 · 02
Element Refs
穩定指標
頁面元素以 e1、e2、e3 標記,代理據此點擊與輸入,比 CSS selector 更耐頁面變動。
互動 · 03
A11y Snapshot
精簡快照
回傳 accessibility snapshot 而非整頁 HTML,體積約小 90%。大頁面自動截斷,以 offset 分頁取後續內容。
隱匿 · 04
Search Macros
搜尋巨集
內建 @google_search、@youtube_search、@amazon_search、@reddit_subreddit 等共 14 個常見網站巨集。
登入 · 05
Session Isolation
隔離session
每位使用者的 cookies/storage 各自獨立,並持久化到 ~/.camofox/profiles,瀏覽器重啟後自動還原登入狀態。
登入 · 06
Cookie Import
注入cookie
匯入 Netscape 格式 cookie 檔做已驗證瀏覽,跳過 LinkedIn、Amazon 等網站的互動式登入。需設 API key。
登入 · 07
VNC Login
視覺登入
透過 noVNC 以肉眼登入網站,再匯出 storage state 供代理重用。處理需手動驗證的登入流程。
路由 · 08
Proxy + GeoIP
代理路由
經住宅代理出口,Camoufox GeoIP 自動依出口 IP 設定 locale、timezone 與座標。支援 backconnect 黏性 session。
擷取 · 09
Structured Extract
結構化擷取
POST /tabs/:tabId/extract 帶一份 JSON Schema,以 x-ref 把屬性對應到 snapshot 的 ref,直接抽成結構化資料。
擷取 · 10
YouTube Transcript
字幕
經 yt-dlp 抽取任意 YouTube 影片字幕,免 API key。Docker 映像已內含 yt-dlp;本機缺它則退回較慢的瀏覽器路徑。
擷取 · 11
Screenshot
在 snapshot 之外一併回傳 base64 PNG 截圖。另可列出頁面 <img> 的 src/alt,並選擇回傳 inline data URL。
觀測 · 12
Session Tracing
追蹤除錯
每個 session 可選開 Playwright trace(截圖+DOM+網路+console),輸出單一 .zip,用 Trace Viewer 開啟。
為什麼是 snapshot 而非 video。Camoufox 基於 Firefox,而 Playwright 的 recordVideo 只支援 Chromium。因此除錯改用 trace——它在 Firefox 上可用,且比影片多了網路、DOM 與 console。完整端點規格見 /openapi.json 與互動式文件 /docs
04
工具與實用設定 · 依 README

代理會用到的
工具與常見設定。

裝成 OpenClaw 外掛後,代理會拿到一組 camofox_* 工具;下面同時整理幾個 README 記載、上線前值得先設好的設定。每條都對應一段官方文件。

工具集

10 個 camofox_* 工具

外掛註冊:create_tabsnapshotclicktypenavigatescrollscreenshotclose_tablist_tabsimport_cookies。對應開分頁、取快照、點擊、輸入、導覽、捲動、截圖、關分頁、列分頁與匯入 cookie。

README · Quick Start · OpenClaw Plugin
TIP 01

要匯入 cookie,先設 API key

cookie 匯入預設關閉;沒設 CAMOFOX_API_KEY 時伺服器一律回 403。用 openssl rand -hex 32 產生金鑰,放進 shell profile 或環境變數,別寫進 plaintext 的 openclaw.json。

README · Usage · Cookie Import
TIP 02

已驗證瀏覽:放 cookie 檔再叫代理匯入

把 Netscape 格式 cookie 檔放到 ~/.camofox/cookies/,再對代理說「import my LinkedIn cookies from linkedin.txt」。每次請求上限 500 條 cookie、5MB,且阻擋目錄外的 path traversal。

README · Cookie Import · How it works
TIP 03

輪換 IP 用 backconnect 黏性 session

Decodo、Bright Data、Oxylabs 這類單一 gateway、session 黏性的供應商,設 PROXY_STRATEGY=backconnect。每個瀏覽器 context 拿到獨立黏性 session,不同使用者得到不同 IP,遇錯或被 Google 擋會自動輪換。

README · Proxy + GeoIP · Backconnect
TIP 04

air-gapped:用外部 Camoufox 執行檔

已有 Camoufox bundle 時,設 CAMOUFOX_EXECUTABLE=/path/to/camoufox-bin 跳過內建下載(適用 NixOS 路徑)。否則用 npm install --omit=optional 再手動 npx camoufox-js fetch 對你的 mirror 抓。

README · Standalone · External executable
TIP 05

session 預設持久化,登入一次即可

camofox 預設把每位使用者的 cookies 與 localStorage 存到 ~/.camofox/profiles/,重啟後自動還原。要換目錄設 CAMOFOX_PROFILE_DIR;要關閉就在 camofox.config.jsonpersistence.enabled=false

README · Session Persistence
TIP 06

除錯:開 trace,用 Trace Viewer 看

開 tab 時帶 trace: true,session 關閉時寫出 .zip。用 npx playwright show-trace session.zip 開啟,可看截圖、DOM、網路與 console。trace 不能在既有 session 上切換,要先 DELETE /sessions/:userId

README · Session Tracing
TIP 07

缺 yt-dlp 仍可抽字幕,只是較慢

/youtube/transcript 端點優先走 yt-dlp 快路徑(pip install yt-dlpbrew install yt-dlp)。Docker 映像已內含;本機沒裝則退回較慢的瀏覽器方法,功能仍在。

README · Optional Dependencies
05
實作範例

開分頁、取快照、
用 ref 點下去

以下用 curl 直接打 REST API,走一輪最常見的流程:啟動伺服器 → 開一個帶 session 的分頁 → 取 snapshot 拿到 element ref → 用結構化 extract 抽資料。端點與參數取自 README;回應為示意。

camofox · localhost:9377
# 啟動伺服器(首次會下載 Camoufox 約 300MB) $ npx @askjo/camofox-browser ✓ listening on http://localhost:9377
# 開一個帶 userId / sessionKey 的分頁 $ curl -X POST http://localhost:9377/tabs \ -H 'Content-Type: application/json' \ -d '{"userId":"agent1","sessionKey":"task1","url":"https://example.com"}'
{ "tabId": "t_8f2a", "title": "Example Domain", "snapshot": [ { "ref": "e1", "role": "heading", "name": "Example Domain" }, { "ref": "e2", "role": "link", "name": "More information..." } ] } # snapshot 比整頁 HTML 小約 90%,元素帶穩定 ref
# 用 ref 點擊(代理只需引用 e2,不必寫 selector) $ curl -X POST http://localhost:9377/tabs/t_8f2a/click \ -H 'Content-Type: application/json' -d '{"ref":"e2"}' ✓ navigated · 回傳新頁 snapshot
# 結構化擷取:JSON Schema 以 x-ref 對應到 snapshot $ curl -X POST http://localhost:9377/tabs/t_8f2a/extract \ -H 'Content-Type: application/json' \ -d '{"schema":{"type":"object","properties":{ "title":{"type":"string","x-ref":"e1"}}}}' ✓ { "title": "Example Domain" }
# 收尾:關 session(若開了 trace,此時寫出 .zip) $ curl -X DELETE http://localhost:9377/sessions/agent1 ✓ session closed
accessibility snapshots instead of bloated HTML, stable element refs for clicking, and search macros for common sites.
— camofox-browser README · 為代理設計的 API

這段流程的重點

差別不在「能不能打開網頁」,而在回給代理的東西:精簡到適合放進 prompt 的 snapshot、用 e1/e2 取代易碎的 selector、以及用 JSON Schema 一次抽成結構化資料。要做已驗證瀏覽,先用第 04 節的 cookie 匯入或 VNC 登入,之後 create_tab 就是登入狀態。

06
先看清楚這些

上線前,
知道這些邊界

  • 別直接跑 docker buildDockerfile 用 bind mount 從 dist/ 取預先下載好的二進位檔,直接 build 會失敗。用 make up(或 make fetchmake build);遠端 CI 改用 Dockerfile.ci
  • 首次啟動會下載約 300MB。npm start 第一次會抓 Camoufox 二進位檔。air-gapped 環境改設 CAMOUFOX_EXECUTABLE 指向既有 bundle,或用 --ignore-scripts / --omit=optional 手動處理。
  • cookie 匯入沒設金鑰會被擋。未設 CAMOFOX_API_KEY 時,所有 cookie 請求回 403。金鑰是機密:放環境變數,別寫進 plaintext 的 openclaw.json
  • 它會繞過機器人偵測,責任在你。反偵測瀏覽可能牴觸目標網站的服務條款或當地法律。只對你有權存取的網站使用,並遵守 robots、速率限制與資料相關規範。
  • 注入的 cookie 等於登入憑證。匯入的 cookie 檔讓 session 進入已驗證狀態,等同把帳號交給代理。限制單次 500 條 / 5MB,妥善保管檔案,別匯入超出任務所需的帳號。
  • 預設會送匿名化當機遙測。當機、event loop 停滯逾 5 秒、或同一分頁連續 3 次失敗時,會自動向 GitHub Issues 回報(私有網域以 HMAC 雜湊、路徑與 token 去識別)。要關閉設 CAMOFOX_CRASH_REPORT_ENABLED=false
  • session 狀態持久化在本機。cookies 與 storage 存於 ~/.camofox/profiles/,重啟後自動還原登入。這台機器等同握有那些網站的登入態,務必做磁碟加密與存取控制。
  • 以 README 與 OpenAPI 為準。專案在演進,端點與旗標可能變動。實作前核對該版的 /openapi.json/docs,不要只依賴本手冊的示意。
07
下一步

從 demo 到正式接上代理。

curl 跑通之後,把它正式接進你的代理。以下依序推進。

建議路徑

1. 讀 OpenAPI 規格。所有端點與參數在 /openapi.json,互動式文件在 /docs。要接哪個動作,先在這裡核對欄位,而非照抄示意。

2. 接成代理工具。用 OpenClaw 就裝外掛拿 camofox_* 工具;其他框架則照 OpenAPI 把端點包成 tool/function call。

3. 處理登入。需要帳號的網站,先用 cookie 匯入或 VNC 登入建立 session,storage 會持久化,之後免再登入。

4. 上代理路由。規模化抓取時設住宅代理;會被 Google 擋的場景用 backconnect 黏性 session 自動輪換 IP。

5. 部署。選 Docker、Fly.io 或 Railway。記得設 CAMOFOX_API_KEY 等機密,並依需要關閉遙測。

延伸閱讀

github.com/jo-inc/camofox-browser——原始碼、README 與 issue 追蹤。
camoufox.com——底層引擎 Camoufox(C++ 層級指紋偽裝的 Firefox fork)。
http://localhost:9377/openapi.json/docs——啟動後即可取得的完整 API 規格。

A REST API built for agents: accessibility snapshots, stable element refs, and search macros.
— camofox-browser README