remix-browser
Blazing fast headless Chrome automation via CDP — no extension needed.
Installation · Tools · Configuration · Architecture

______________________________________________________________________
Rust本地人 主控程序 通过Chrome DevTools协议,AI代理可以完全控制真实的Chrome浏览器。没有浏览器扩展,没有Puppeteer,没有Node.js——只有一个说CDP的二进制文件。
基准测试
| 方法 | 时间 | 成本 | 周转 | 成功 |
|---|---|---|---|---|
| 混音浏览器 | 3米35秒 | $0.83 | 23 | 100% |
| 开发者浏览器 | 300万53秒 | 0.88美元 | 29美元 | 100% |
| 剧作家MCP | 400万31s | 1.45美元 | 51 | 100% |
| 编剧技巧 | 800万07s | 1.45美元 | 38 | 100% |
| 克劳德代码原生Chrome | 1200万54秒 | 2.81美元 | 80美元 | 100% |
\_请参阅 dev浏览器评估 方法论。使用的模型是十四行诗4.5
为什么要重新混合浏览器?
| 混音浏览器 | 基于扩展的MCP | Puppeter包装器 | |
|---|---|---|---|
| 初创公司 | 单二进制,即时 | 需要安装浏览器扩展 | Node.js+npm安装 |
| 可靠性 | 具有自动回退功能的混合点击策略 | 扩展消息传递 | 仅基本点击 |
| 多标签 | 内置选项卡池管理 | 受扩展API限制 | 手动页面跟踪 |
| 网络捕获 | 一流的网络监控 | 不可用 | 需要额外设置 |
| 控制台日志 | 内置过滤捕获功能 | 不可用 | 需要额外设置 |
| 选择器 | CSS+文本+XPath | 仅限CSS | CSS+XPath |
| 语言 | Rust(快速、安全、单二进制) | JavaScript | JavaScript |
安装
Claude代码插件(推荐)
/plugin marketplace add hkd987/remix-browser
/plugin install remix-browser@hkd987-remix-browser就是这样——二进制文件在首次使用时会自动下载。无需生锈。
下载预构建的二进制文件
curl -fsSL https://raw.githubusercontent.com/hkd987/remix-browser/main/scripts/install.sh | sh来源
git clone https://github.com/hkd987/remix-browser.git
cd remix-browser
cargo build --release需求
- 谷歌浏览器 或 铬 已安装(自动检测)
- 锈蚀1.88+ 仅当从源头构建时才需要
快速开始
添加到克劳德代码
添加到您的Claude Code MCP配置中(~/.claude/mcp.json):
{
"mcpServers": {
"remix-browser": {
"command": "/path/to/remix-browser"
}
}
}就是这样。克劳德现在有浏览器了。
头部模式(查看发生了什么)
{
"mcpServers": {
"remix-browser": {
"command": "/path/to/remix-browser",
"args": ["--headed"]
}
}
}连接到现有浏览器
Chrome 144+有一个内置的切换,可以让任何代理连接到您正在运行的浏览器——不需要扩展程序。
- 打开
chrome://inspect/#remote-debugging在Chrome浏览器中 - 启用远程调试切换
- 连接混音浏览器:
{
"mcpServers": {
"remix-browser": {
"command": "/path/to/remix-browser",
"args": ["--cdp-url", "ws://127.0.0.1:9222"]
}
}
}或者使用环境变量:
{
"mcpServers": {
"remix-browser": {
"command": "/path/to/remix-browser",
"env": {
"CDP_URL": "ws://127.0.0.1:9222"
}
}
}
}HTTP URL也可以工作——WebSocket URL是从以下位置自动发现的 /json/version:
CDP_URL=http://127.0.0.1:9222 remix-browser当连接到外部浏览器时,混音浏览器会使用您现有的标签页,并在退出时优雅地断开连接,而无需关闭Chrome。
最佳性能提示
为了获得最佳体验,请将此行添加到您的项目中 CLAUDE.md (或 ~/.claude/CLAUDE.md 对于所有项目):
When I ask to use Chrome or browser automation, use remix-browser MCP tools.
For 1-2 simple actions, granular tools are fine.
For workflows with 3+ actions, loops, or extraction, prefer `run_script`.
Use `fill` for setting any form control — it auto-detects input type (text, select, checkbox, range slider).
Snapshots auto-append after every tool call, so [ref=eN] selectors are always fresh.这条消息告诉Claude,每当你提到浏览器任务时,都要自动访问remixbrowser,而无需说出“remixbrowse”的名字。
性能使用模式
- 使用粒度工具处理短流程(
navigate->click->get_text). - 使用
run_script用于多步骤工作流、循环和重复提取。 - 使用
fill而不是type_text+select_option--它自动检测控件类型(文本、选择、复选框、范围滑块、ARIA滑块)。 - 每次工具调用后都会自动追加快照,因此
[ref=eN]选择器始终可用,无需单独的snapshot电话。 - 所有交互工具(
click,type_text,fill)包括 自动等待 --它们在动作前最多轮询5秒,以确保元素出现,从而消除了动态页面上的计时错误。
工具
rex浏览器提供了一个按类别组织的广泛工具集。
导航
| 工具 | 说明 |
|---|---|
navigate | 转到URL。支持 load, domcontentloaded,以及 networkidle 等待策略。 |
go_back | 返回历史记录。 |
go_forward | 在历史中向前导航。 |
reload | 重新加载当前页面。 |
get_page_info | 获取当前URL、标题和视口尺寸。 |
查找元素
| 工具 | 说明 |
|---|---|
find_elements | 通过CSS选择器、文本内容或XPath查找元素。返回标记、文本、属性和节点ID。 |
get_text | 从匹配的元素中提取文本内容。 |
get_html | 获取页面或特定元素的内部或外部HTML。 |
wait_for | 等待元素出现、消失或变得可见。可配置超时。 |
快照
| 工具 | 说明 |
|---|---|
snapshot | 返回一个紧凑的交互式元素列表,其中包含稳定的引用,例如 [ref=e0] 它可以在选择器中重用。 |
交互
| 工具 | 说明 |
|---|---|
click | 使用鼠标单击元素 混合策略 --首先尝试真实的鼠标事件,如果元素被遮挡,则回退到JS调度。自动等待元素出现最多5秒。 |
type_text | 在输入字段中键入。可选择先清除现有内容。自动等待元素出现最多5秒。 |
fill | 智能表单控件设置器 --自动检测输入类型并适当设置值。适用于文本输入、文本区域、, `,复选框, input[type=range] 滑块和ARIA role="slider"` 元素。 |
hover | 将鼠标悬停在元素(火)上 mouseenter, mouseover, mousemove). |
select_option | 在中选择一个选项 `` 按值下拉。 |
press_key | 按键盘键(Enter, Tab, ArrowDown等等),并带有可选的修饰语。 |
scroll | 在任何方向上滚动页面或特定元素。 |
截图
| 工具 | 说明 |
|---|---|
screenshot | 以base64 PNG/JPEG格式捕获视口、整页或特定元素。 |
JavaScript和控制台
| 工具 | 说明 |
|---|---|
execute_js | 运行任意JavaScript并将结果作为JSON返回。 |
read_console | 读取捕获 console.log/warn/error 输出。按级别或正则表达式模式过滤。 |
网络监控
| 工具 | 说明 |
|---|---|
network_enable | 开始捕获网络请求。可选择按URL模式过滤。 |
get_network_log | 通过URL模式、HTTP方法或状态代码查询捕获的请求。包括计时数据。 |
选项卡管理
| 工具 | 说明 |
|---|---|
new_tab | 打开一个新选项卡,可选择导航到URL |
close_tab | 关闭特定选项卡或活动选项卡。 |
list_tabs | 列出所有打开的标签及其URL和标题。 |
脚本自动化
| 工具 | 说明 |
|---|---|
run_script | 使用同步工具在一次工具调用中执行多步浏览器自动化 page.* API包含 page.fill(), page.click(), page.type(), page.js()以及更多。 [ref=eN] 选择器内部自动解析 page.js() 表达。最适合循环、重复操作和提取工作流。 |
选择器类型
所有元素定位工具都支持三种选择策略:
CSS (default): "button.submit", "#login-form", "div > p:first-child"
Text: "Sign In", "Submit Order", "Click here"
XPath: "//button[@type='submit']", "//div[contains(@class, 'menu')]"文本选择器使用TreeWalker根据可见的文本内容查找元素——不需要检查DOM来找到正确的CSS类。
混合点击
大多数浏览器自动化工具在现代JS密集型网站上都失败了。下拉菜单、叠加、动态定位元素——它们都很简单 element.click().
混音浏览器使用 混合点击策略:
- 自动等待 元素在DOM中出现的时间最多为5秒
- 将元素滚动到视图中
- 检查可见性以及是否被其他元素遮挡
- 发送真实鼠标事件(
mousedown->mouseup->click)在元素的坐标处 - 如果元素被遮挡(例如,在覆盖层后面),则自动回退到JavaScript
click() - 报告使用了哪种方法,以便您确切地知道发生了什么
这意味着点击 只管工作 --即使在具有复杂覆盖、粘性标题、动态菜单和延迟加载元素的网站上也是如此。
配置
| 选项 | 默认值 | 描述 |
|---|---|---|
--headed | false | 显示浏览器窗口,而不是无头运行 |
--cdp-url | -- | 通过CDP WebSocket或HTTP URL连接到现有浏览器 |
CDP_URL env var | -- | 与相同 --cdp-url (环境变量替代) |
RUST_LOG 有人是。 info | 控制日志冗长(debug, trace等等) |
Chrome检测
混音浏览器会自动在您的系统上找到Chrome:
- macOS:
/Applications/Google Chrome.app,自制路径,Chrome Canary - Linux:
/usr/bin/google-chrome,卡扣包,Chromium - 视窗:程序文件,本地AppData
回落到 which google-chrome / which chromium 如果标准路径不存在。
默认浏览器设置
- 视口:1280x720
- 无头模式:
--headless=new(Chrome的最新无头实现) - 对于干净的自动化环境,扩展、同步、弹出窗口和首次运行提示都被禁用
建筑
src/
├── main.rs # CLI entry point
├── server.rs # MCP ServerHandler — routes tool calls
├── browser/
│ ├── session.rs # Browser lifecycle management
│ ├── pool.rs # Multi-tab tracking (TabPool)
│ └── launcher.rs # Chrome binary detection & launch config
├── tools/
│ ├── navigation.rs # navigate, go_back, go_forward, reload
│ ├── dom.rs # find_elements, get_text, get_html, wait_for
│ ├── interaction.rs # click, type_text, fill, hover, select_option, press_key, scroll
│ ├── screenshot.rs # screenshot capture
│ ├── snapshot.rs # compact interactive tree + ref generation
│ ├── javascript.rs # execute_js, console log capture
│ ├── network.rs # network monitoring
│ ├── page.rs # tab management
│ └── script.rs # run_script JS engine and page API
├── interaction/
│ ├── click.rs # Hybrid click strategy implementation
│ ├── keyboard.rs # Key press & text input
│ ├── scroll.rs # Scroll logic
│ └── wait.rs # Auto-wait polling for element existence
└── selectors/
├── mod.rs # Selector normalization & :has-text() conversion
├── css.rs # CSS selector resolution
├── text.rs # Text content matching via TreeWalker
├── xpath.rs # XPath evaluation
└── ref.rs # [ref=eN] snapshot reference resolution构建于:
测试
# Run all 50 integration tests (uses real headless Chrome)
cargo test -- --test-threads=4
# Run a specific test
cargo test test_navigate测试使用固定的HTML文件,并启动具有唯一配置文件的独立Chrome实例——没有共享状态,没有漏洞。
许可证
麻省理工学院
