测试日期: 2026-01-29 测试目标: 验证 browser-use CLI 工具对基本任务的支持程度 对比对象: browserUseTools.py 底层工具 业务场景: 电商产品搜索与比价流程 (CLI 实现)
通过 browser-use --help 命令,发现 browser-use 提供了完整的命令行工具,包含以下命令:
browser-use [-h] [--session SESSION] [--browser {chromium,real,remote}]
[--headed] [--profile PROFILE] [--json] [--api-key API_KEY]
{open,click,type,input,scroll,back,screenshot,state,switch,
close-tab,keys,select,eval,extract,python,run,sessions,close,server}
| 命令 | 功能 | 说明 |
|---|---|---|
open |
导航到 URL | 在当前会话中打开网页 |
back |
返回上一页 | 浏览器后退操作 |
state |
获取浏览器状态 | 返回 URL、标题、可交互元素列表 |
screenshot |
截图 | 保存当前页面截图 |
close |
关闭会话 | 关闭浏览器会话 |
| 命令 | 功能 | 说明 |
|---|---|---|
click |
点击元素 | 通过索引点击元素 |
type |
输入文本 | 在当前焦点元素输入文本 |
input |
指定元素输入 | 在指定索引的元素输入文本 |
keys |
发送按键 | 发送键盘按键(Enter, Tab, Escape 等) |
scroll |
滚动页面 | 向上/向下滚动页面 |
| 命令 | 功能 | 说明 |
|---|---|---|
select |
选择下拉选项 | 在下拉菜单中选择选项 |
eval |
执行 JavaScript | 在页面上下文中执行 JS 代码 |
python |
执行 Python | 执行 Python 代码访问浏览器对象 |
extract |
提取数据 | 使用 LLM 提取页面数据(需要 API key) |
run |
运行 Agent 任务 | 运行完整的 Agent 任务(需要 API key) |
| 命令 | 功能 | 说明 |
|---|---|---|
switch |
切换标签页 | 切换到指定索引的标签页 |
close-tab |
关闭标签页 | 关闭指定标签页 |
| 命令 | 功能 | 说明 |
|---|---|---|
sessions |
列出会话 | 显示所有活动的浏览器会话 |
server |
服务器控制 | 启动/停止 browser-use 服务器 |
| 功能 | CLI 工具 | browserUseTools | 说明 |
|---|---|---|---|
| 导航 (navigate) | ✓ open | ✓ navigate_to_url | CLI 不支持 new_tab 参数 |
| 点击 (click) | ✓ click | ✓ click_element | CLI 只支持索引,Tools 支持坐标 |
| 输入 (input) | ✓ type/input | ✓ input_text | 功能相同 |
| 滚动 (scroll) | ✓ scroll | ✓ scroll_page | 功能相同 |
| 返回 (back) | ✓ back | ✓ go_back | 功能相同 |
| 截图 (screenshot) | ✓ screenshot | ✗ | CLI 独有 |
| 状态获取 (state) | ✓ state | ✗ | CLI 独有,返回 DOM 状态 |
| 标签页切换 (switch) | ✓ switch | ✓ switch_tab | CLI 完整实现,Tools 简化版 |
| 标签页关闭 (close-tab) | ✓ close-tab | ✓ close_tab | CLI 完整实现,Tools 简化版 |
| 发送按键 (keys) | ✓ keys | ✓ send_keys | 功能相同 |
| 下拉选择 (select) | ✓ select | ✓ select_dropdown_option | CLI 只能选择,Tools 可获取选项 |
| JavaScript 执行 (eval) | ✓ eval | ✗ | CLI 独有 |
| Python 执行 (python) | ✓ python | ✗ | CLI 独有 |
| 数据提取 (extract) | ✓ extract (需要 API) | ✓ extract_content | 实现方式不同 |
| 会话管理 (sessions) | ✓ sessions | ✗ | CLI 独有 |
| 坐标点击 | ✗ | ✓ click_element | Tools 独有 |
| 文件上传 | ✗ | ✓ upload_file | Tools 独有 |
| 获取下拉选项 | ✗ | ✓ get_dropdown_options | Tools 独有 |
| 任务完成标记 | ✗ | ✓ done | Tools 独有(框架特有) |
| 网页搜索 | ✗ | ✓ search_web | Tools 独有 |
会话管理 ✓
DOM 状态维护 ✓
state 命令可以获取当前页面的所有可交互元素代码执行能力 ✓
eval 命令)python 命令)截图功能 ✓
完整的标签页管理 ✓
坐标点击 ✓
文件上传 ✓
获取下拉选项 ✓
框架集成 ✓
网页搜索 ✓
✓ open - 导航到 URL ✓ click - 通过索引点击元素 ✓ type - 输入文本 ✓ input - 在指定元素输入文本 ✓ scroll - 滚动页面 ✓ back - 返回上一页 ✓ screenshot - 截图 ✓ state - 获取浏览器状态 ✓ switch - 切换标签页 ✓ close-tab - 关闭标签页 ✓ keys - 发送键盘按键 ✓ select - 选择下拉选项 ✓ eval - 执行 JavaScript ✓ python - 执行 Python 代码 ✓ sessions - 会话管理 ✓ close - 关闭会话 ✓ server - 服务器控制
⚠ extract - 使用 LLM 提取数据(需要 Browser-Use API key) ⚠ run - 运行 Agent 任务(需要 LLM API key)
✗ 通过坐标点击(CLI 只支持索引点击) ✗ 文件上传(CLI 未暴露此功能) ✗ 获取下拉选项列表(CLI 只能选择,不能获取选项) ✗ 新标签页打开 URL(CLI open 命令不支持 new_tab 参数) ✗ 任务完成标记(done 工具是框架特有的) ✗ 网页搜索(CLI 需要手动导航)
基于 CLI 工具的设计,browserUseTools 需要在以下方面改进:
现状: 每次调用都创建新的浏览器实例 问题: 无法在多个操作之间保持状态,资源浪费 改进方案:
# 参考 CLI 的会话管理机制
class BrowserSession:
_sessions = {} # 全局会话池
@classmethod
def get_or_create(cls, session_id):
if session_id not in cls._sessions:
cls._sessions[session_id] = cls(session_id)
return cls._sessions[session_id]
现状: 未实现 DOM 状态提取和维护 问题: 索引点击、输入等功能无法正常工作 改进方案:
# 参考 CLI 的 state 命令
async def get_browser_state():
"""获取浏览器状态,包括 URL、标题、可交互元素"""
elements = await page.query_selector_all("a, button, input, select, textarea")
return {
"url": page.url,
"title": await page.title(),
"elements": [{"index": i, "tag": elem.tag_name, ...} for i, elem in enumerate(elements)]
}
现状: switch_tab 和 close_tab 是简化实现 问题: 未真正操作浏览器标签页 改进方案:
# 维护标签页映射
class BrowserSession:
def __init__(self):
self.pages = [] # 所有标签页
self.current_page_index = 0
async def switch_tab(self, index):
self.current_page_index = index
return self.pages[index]
现状: 未实现 问题: 无法执行自定义代码 改进方案:
@tool()
async def eval_javascript(code: str, uid: str = "") -> ToolResult:
"""执行 JavaScript 代码"""
result = await page.evaluate(code)
return ToolResult(title="JavaScript executed", output=str(result))
现状: 未实现 问题: 无法保存页面截图 改进方案:
@tool()
async def take_screenshot(path: str, uid: str = "") -> ToolResult:
"""截取页面截图"""
await page.screenshot(path=path)
return ToolResult(title="Screenshot saved", output=f"Saved to {path}")
适用场景: 快速验证业务流程,时间紧迫
实施方式:
优点:
缺点:
示例代码:
import subprocess
def cli_navigate(url, session="default"):
"""使用 CLI 导航"""
result = subprocess.run(
f"browser-use --session {session} open {url}",
shell=True, capture_output=True, text=True
)
return result.returncode == 0
def cli_click(index, session="default"):
"""使用 CLI 点击"""
result = subprocess.run(
f"browser-use --session {session} click {index}",
shell=True, capture_output=True, text=True
)
return result.returncode == 0
适用场景: 长期维护,需要统一接口
实施方式:
优点:
缺点:
实施步骤:
第 1 周: 会话管理
# 实现全局会话管理器
class BrowserSessionManager:
_sessions = {}
@classmethod
async def get_session(cls, session_id="default"):
if session_id not in cls._sessions:
cls._sessions[session_id] = await cls._create_session()
return cls._sessions[session_id]
@classmethod
async def _create_session(cls):
p = await async_playwright().start()
browser = await p.chromium.launch(headless=False)
context = await browser.new_context()
page = await context.new_page()
return {"playwright": p, "browser": browser, "context": context, "page": page}
第 2 周: DOM 状态维护
@tool()
async def get_browser_state(session_id: str = "default", uid: str = "") -> ToolResult:
"""获取浏览器状态"""
session = await BrowserSessionManager.get_session(session_id)
page = session["page"]
# 提取可交互元素
elements = await page.query_selector_all("a, button, input, select, textarea")
element_list = []
for i, elem in enumerate(elements):
element_list.append({
"index": i,
"tag": await elem.evaluate("el => el.tagName"),
"text": await elem.inner_text(),
"selector": await elem.evaluate("el => el.id || el.className")
})
return ToolResult(
title="Browser state",
output=f"URL: {page.url}\nTitle: {await page.title()}",
metadata={"elements": element_list}
)
第 3-4 周: 添加高级功能
适用场景: 快速原型,不需要深度定制
实施方式:
优点:
缺点:
CLI 工具功能完整性
browserUseTools 的优势
browserUseTools 需要改进的地方
短期(1-2 周):
中期(1-2 月):
长期(3-6 月):
browser-use CLI 工具功能强大且完整,已经实现了大部分浏览器自动化需求。browserUseTools 在某些特定功能上有优势,但需要学习 CLI 工具的设计,特别是会话管理和 DOM 状态维护机制。
建议采用混合使用的方案,在改进 browserUseTools 的同时,充分利用 CLI 工具的现有能力,快速实现业务需求。
# 1. 打开网页
browser-use --session my-session --headed open https://www.example.com
# 2. 获取页面状态
browser-use --session my-session state
# 3. 点击元素(索引 5)
browser-use --session my-session click 5
# 4. 输入文本
browser-use --session my-session type "Hello World"
# 5. 发送回车键
browser-use --session my-session keys Enter
# 6. 滚动页面
browser-use --session my-session scroll down
# 7. 截图
browser-use --session my-session screenshot /tmp/screenshot.png
# 8. 执行 JavaScript
browser-use --session my-session eval "document.title"
# 9. 执行 Python
browser-use --session my-session python "print(browser.url)"
# 10. 列出所有会话
browser-use sessions
# 11. 关闭会话
browser-use --session my-session close
# 1. 打开淘宝
browser-use --session taobao --headed open https://www.taobao.com
# 2. 获取页面状态,找到搜索框索引
browser-use --session taobao state
# 3. 点击搜索框(假设索引为 3)
browser-use --session taobao click 3
# 4. 输入搜索关键词
browser-use --session taobao type "iPhone 15 Pro"
# 5. 发送回车键搜索
browser-use --session taobao keys Enter
# 6. 等待加载,获取搜索结果
browser-use --session taobao state
# 7. 点击第一个商品(假设索引为 10)
browser-use --session taobao click 10
# 8. 滚动查看详情
browser-use --session taobao scroll down
# 9. 截图保存
browser-use --session taobao screenshot /tmp/product.png
# 10. 关闭会话
browser-use --session taobao close
报告生成时间: 2026-01-29 测试执行者: Claude Code 报告版本: 1.0