🚀 BrowserControl
BrowserControl 是一個 MCP 服務器,它以 視覺優先 的方式讓你的 AI 代理全面訪問瀏覽器,無需使用 CSS 選擇器、XPath,也無需猜測,只需指向編號元素即可操作。
🚀 快速開始
安裝
pip install browsercontrol
uv add browsercontrol
運行服務器
browsercontrol
python -m browsercontrol
fastmcp run browsercontrol.server:mcp
連接到你的 AI 代理
BrowserControl 可與任何兼容 MCP 的 AI 代理或 IDE 配合使用。選擇你使用的平臺:
Claude Desktop
添加到你的 Claude 配置文件中:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Linux:
~/.config/Claude/claude_desktop_config.json
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"browsercontrol": {
"command": "browsercontrol"
}
}
}
重啟 Claude Desktop,然後詢問:
"訪問 GitHub 並給 browsercontrol 倉庫加星標"
✨ Gemini CLI / Google AI Studio
如果你使用支持 MCP 的 Gemini CLI 或 Google AI Studio:
export MCP_SERVERS='{"browsercontrol": {"command": "browsercontrol"}}'
對於 Google AI Studio,在 MCP 設置面板中進行配置。
🔧 Cline(VS Code 擴展)
- 安裝 Cline 擴展
- 打開 Cline 設置(齒輪圖標)
- 導航到 "MCP Servers"
- 添加新服務器:
{
"browsercontrol": {
"command": "browsercontrol"
}
}
🤖 Continue.dev(VS Code/JetBrains)
添加到你的 Continue 配置文件(~/.continue/config.json)中:
{
"mcpServers": [
{
"name": "browsercontrol",
"command": "browsercontrol"
}
]
}
🎯 Cursor IDE
- 打開 Cursor 設置
- 導航到 "Features" → "Model Context Protocol"
- 添加服務器配置:
{
"browsercontrol": {
"command": "browsercontrol"
}
}
🔌 Zed Editor
添加到你的 Zed 設置文件(~/.config/zed/settings.json)中:
{
"context_servers": {
"browsercontrol": {
"command": {
"path": "browsercontrol"
}
}
}
}
🐍 自定義 Python 集成
使用 MCP Python SDK 將 BrowserControl 集成到你自己的代理中:
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
server_params = StdioServerParameters(
command="browsercontrol",
args=[],
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
result = await session.call_tool("navigate_to", {
"url": "https://github.com"
})
🚀 使用 uv 或 pipx 安裝
如果你使用 uv 或 pipx 安裝,請使用完整路徑:
{
"mcpServers": {
"browsercontrol": {
"command": "uvx",
"args": ["browsercontrol"]
}
}
}
或者使用 pipx:
{
"mcpServers": {
"browsercontrol": {
"command": "pipx",
"args": ["run", "browsercontrol"]
}
}
}
🔧 高級配置
你可以通過傳遞環境變量來自定義 BrowserControl:
{
"mcpServers": {
"browsercontrol": {
"command": "browsercontrol",
"env": {
"BROWSER_HEADLESS": "false",
"BROWSER_VIEWPORT_WIDTH": "1920",
"BROWSER_VIEWPORT_HEIGHT": "1080",
"LOG_LEVEL": "DEBUG"
}
}
}
}
有關所有可用選項,請參閱 配置。
✨ 主要特性
與傳統方法的對比
| 對比項 |
傳統方法 |
BrowserControl |
| 操作方式 |
解析複雜的 DOM 結構、猜測 CSS 選擇器,如 "Find the button with class 'btn-primary' that contains 'Submit' and is inside form#contact-form..." |
查看帶有編號元素的 渲染頁面,直接說 "click 5" 或 "type in 3" |
| JavaScript 支持 |
無 |
支持完整的 動態 JavaScript |
| 登錄持久化 |
無 |
跨重啟保持 持久會話 |
| 調試工具 |
無 |
可完全訪問 開發者工具 |
核心優勢
1. 多標籤管理
與其他工具在新窗口打開時容易“迷失”不同,BrowserControl 提供以下功能:
list_tabs() — 查看每個打開頁面的標題和 URL
switch_tab(index) — 在不同網站之間進行多任務處理
create_tab(url) — 打開參考頁面或並行工作流
2. 會話和 cookie 管理
無需再為登錄表單煩惱,可直接注入或檢查會話狀態:
set_cookie() — 通過注入認證令牌立即登錄
get_cookies() — 調試會話問題或導出狀態
clear_cookies() — 無需清除整個配置文件即可重新開始
3. 可靠的文件上傳
大多數 AI 代理在遇到 <input type="file"> 時會失敗,而 BrowserControl 使用原生瀏覽器引擎鉤子:
upload_file(id, path) — 只需指向按鈕和本地文件即可上傳
4. 開發者工具套件
使用其他工具沒有提供的工具進行專業調試:
get_console_logs()
get_network_requests()
get_page_errors()
run_in_console(code)
inspect_element(5)
get_page_performance()
5. 會話錄製
start_recording() → 瀏覽頁面 → stop_recording()
↓
session_20260202.zip
(使用 Playwright 跟蹤查看器查看)
6. 動態視口控制
即時測試響應式設計或模擬移動屏幕:
set_viewport(width, height) — 無需重啟即可更改分辨率
7. 真正的持久化
| 持久化項 |
BrowserControl |
其他工具 |
| Cookies |
✅ |
❌ |
| localStorage |
✅ |
❌ |
| 會話令牌 |
✅ |
❌ |
| 登錄狀態 |
✅ |
❌ |
| 瀏覽器歷史記錄 |
✅ |
❌ |
結果:只需登錄一次,即可跨會話保持登錄狀態。
🎯 工作原理:標記集(SoM)
每個屏幕截圖都會在交互式元素上標註 編號的紅色框:
Found 15 interactive elements:
[1] button - Sign In
[2] input - Search...
[3] a - Products
[4] a - Pricing
[5] button - Get Started
你的代理看到這些編號後,只需調用 click(1) 即可登錄。無需 CSS 選擇器,無需 XPath,無需猜測。
詳細工作流程
- AI 發送命令 —
click(5)
- 服務器查找元素 — 從最後一張截圖中查找編號為 5 的元素
- 瀏覽器執行操作 — 點擊該元素的座標位置
- 捕獲狀態 — 拍攝新的屏幕截圖,檢測元素
- 標註 — 在交互式元素上繪製編號框
- 返回給 AI — 發送標註後的圖像和元素列表
📦 安裝指南
pip install browsercontrol
uv add browsercontrol
💻 使用示例
網頁研究
你:"訪問維基百科,瞭解 Python 是何時創建的"
Claude:*導航到 wikipedia.org*
*在搜索框中輸入 "Python programming language"*
*點擊搜索結果*
*閱讀頁面內容*
"Python 由 Guido van Rossum 創建,並於 1991 年首次發佈。"
調試 Web 應用
你:"訪問本地運行在 localhost:3000 的應用,並檢查是否有錯誤"
Claude:*導航到 localhost:3000*
*調用 get_console_logs()*
"我發現了 2 個錯誤:
[ERROR] Uncaught TypeError: Cannot read property 'map' of undefined
[ERROR] Failed to load resource: 404 /api/users"
*調用 get_network_requests()*
"/api/users 端點返回 404,請檢查你的 API 路由。"
帶錄製功能的自動化測試
你:"測試我網站上的登錄流程,並開始錄製"
Claude:*調用 start_recording()*
*導航到網站*
*在元素 3 中輸入電子郵件*
*在元素 4 中輸入密碼*
*點擊登錄按鈕(元素 5)*
*驗證是否成功重定向*
*調用 stop_recording()*
"登錄測試通過!錄製已保存為 session_20260202.zip"
表單自動化
你:"填寫 example.com 上的聯繫表單"
Claude:*導航到 example.com/contact*
*在元素 2 中輸入姓名*
*在元素 3 中輸入電子郵件*
*在元素 4 中輸入消息*
*點擊提交按鈕(元素 5)*
"表單提交成功!"
📚 詳細文檔
可用工具
導航
| 工具 |
描述 |
navigate_to(url) |
訪問指定 URL |
go_back() |
後退 |
go_forward() |
前進 |
refresh_page() |
刷新頁面 |
scroll(direction, amount) |
向上/下/左/右滾動 |
交互
| 工具 |
描述 |
click(element_id) |
通過編號點擊元素 |
click_at(x, y) |
點擊指定座標位置 |
type_text(element_id, text) |
在輸入字段中輸入文本 |
press_key(key) |
按下鍵盤按鍵(如 Enter、Tab 等) |
hover(element_id) |
懸停在元素上 |
scroll_to_element(element_id) |
將元素滾動到可見區域 |
upload_file(element_id, path) |
上傳文件到輸入框 |
wait(seconds) |
等待頁面加載 |
標籤管理
| 工具 |
描述 |
create_tab(url) |
打開新的瀏覽器標籤頁 |
switch_tab(index) |
切換到指定索引的標籤頁 |
close_tab(index) |
關閉指定標籤頁 |
list_tabs() |
列出所有打開的標籤頁和 URL |
表單操作
| 工具 |
描述 |
select_option(element_id, option) |
選擇下拉選項 |
check_checkbox(element_id) |
切換複選框狀態 |
upload_file(element_id, file_path) |
上傳文件到輸入框 |
內容提取
| 工具 |
描述 |
get_page_content() |
獲取頁面的 Markdown 格式內容 |
get_text(element_id) |
獲取元素的文本內容 |
get_page_info() |
獲取頁面的 URL 和標題 |
run_javascript(script) |
執行 JavaScript 代碼 |
screenshot(annotate, full_page) |
截取屏幕截圖 |
開發者工具
| 工具 |
描述 |
get_console_logs() |
獲取瀏覽器控制檯輸出 |
get_network_requests() |
獲取 API 調用和響應 |
get_page_errors() |
獲取 JavaScript 錯誤 |
run_in_console(code) |
在控制檯執行 JavaScript 代碼 |
inspect_element(id) |
檢查元素的樣式和屬性 |
get_cookies() |
獲取瀏覽器的 cookies 列表 |
set_cookie(name, value, ...) |
設置 cookie |
delete_cookie(name) |
刪除 cookie |
clear_cookies() |
清除所有 cookies |
set_viewport(width, height) |
更改窗口大小 |
get_page_performance() |
獲取頁面加載時間和 Web 指標 |
錄製功能
| 工具 |
描述 |
start_recording() |
開始會話錄製 |
stop_recording() |
保存錄制內容 |
take_snapshot() |
保存屏幕截圖和 HTML 內容 |
list_recordings() |
查看已保存的會話記錄 |
配置
通過環境變量進行配置:
| 變量 |
默認值 |
描述 |
BROWSER_HEADLESS |
true |
無界面運行瀏覽器 |
BROWSER_VIEWPORT_WIDTH |
1280 |
視口寬度(像素) |
BROWSER_VIEWPORT_HEIGHT |
720 |
視口高度(像素) |
BROWSER_TIMEOUT |
30000 |
導航超時時間(毫秒) |
BROWSER_USER_DATA_DIR |
~/.browsercontrol/user_data |
瀏覽器配置文件路徑 |
BROWSER_EXTENSION_PATH |
— |
瀏覽器擴展路徑 |
LOG_LEVEL |
INFO |
日誌詳細程度 |
示例:
BROWSER_HEADLESS=false browsercontrol
BROWSER_VIEWPORT_WIDTH=375 BROWSER_VIEWPORT_HEIGHT=812 browsercontrol
LOG_LEVEL=DEBUG browsercontrol
🔧 技術細節
架構
┌─────────────────┐ ┌──────────────────┐ ┌─────────────┐
│ AI Agent │────▶│ BrowserControl │────▶│ Browser │
│ (Claude/Gemini) │◀────│ MCP Server │◀────│ (Chromium) │
└─────────────────┘ └──────────────────┘ └─────────────┘
│ │ │
│ "click(5)" │ mouse.click() │
│◀───────────────────────│◀─────────────────────│
│ [annotated │ [screenshot + │
│ screenshot] │ element map] │
項目結構
browsercontrol/
├── __init__.py # 包導出
├── __main__.py # CLI 入口點
├── server.py # MCP 服務器設置
├── browser.py # 帶有 SoM 的瀏覽器管理器
├── config.py # 環境配置
└── tools/
├── navigation.py # 導航工具
├── interaction.py # 點擊、輸入、懸停工具
├── forms.py # 表單處理工具
├── content.py # 內容提取工具
├── devtools.py # 開發者工具
├── recording.py # 會話錄製工具
└── tabs.py # 標籤管理工具
📄 許可證
本項目採用 MIT 許可證,你可以根據需要自由使用。
🤝 貢獻
歡迎貢獻代碼!請查看我們的 貢獻指南 瞭解詳細信息。
貢獻想法:
- [ ] 支持 Firefox/WebKit
- [ ] DOM 差異檢測(檢測變化)
- [ ] 可訪問性審計工具
- [ ] 移動模擬預設
- [ ] Cookie 導入/導出文件
git clone https://github.com/adityasasidhar/browsercontrol
cd browsercontrol
uv sync
uv run pytest
uv run fastmcp dev browsercontrol/server.py
🔧 故障排除
"Missing X server" 錯誤
設置 BROWSER_HEADLESS=true 或使用 xvfb 運行:
xvfb-run browsercontrol
瀏覽器無法啟動
首次運行時會自動安裝 Chromium,如果安裝失敗,請手動安裝:
python -m playwright install chromium
會話無法持久化
檢查 BROWSER_USER_DATA_DIR 是否可寫:
ls -la ~/.browsercontrol/
連接被拒絕
確保沒有其他實例正在運行:
pkill -f browsercontrol
browsercontrol
查看會話錄製
在 Playwright 跟蹤查看器中打開錄製文件:
npx playwright show-trace ~/.browsercontrol/recordings/session.zip
專為需要瀏覽網頁的 AI 代理而構建。
⭐ 在 GitHub 上給項目加星 •
🐛 報告 Bug •
💡 請求新功能