browser-use demo002 实战总结
背景
在上一篇介绍 browser-use 的文章中,我们了解了这个 AI 驱动的浏览器自动化工具的基本概念。本文通过一个实际的 demo002.py 示例,深入分析 browser-use 的实际运行效果,包括配置细节、执行流程和结果分析。
示例代码分析
demo002.py 是一个最小化的 browser-use 使用示例,核心代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
import asyncio
from browser_use import Agent, BrowserProfile
from browser_use.llm import ChatOpenAI
async def main():
# 1. 配置浏览器参数
browser_profile = BrowserProfile(
headless=True,
args=[
"--no-sandbox",
"--disable-setuid-sandbox",
"--disable-dev-shm-usage",
"--disable-gpu",
"--remote-debugging-port=9222", # 强制 CDP 端口
],
)
# 2. 配置 LLM(使用 OpenAI 兼容接口)
llm = ChatOpenAI(
model="gpt-5.4",
# api_key="你的API密钥", # 也可以通过环境变量 OPENAI_API_KEY 设置
base_url="http://127.0.0.1:9900/v1", # 替换为你的代理服务器地址
)
# 3. 创建 Agent 并执行任务
agent = Agent(
task="打开 https://example.com 并告诉我页面标题",
llm=llm,
browser_profile=browser_profile,
)
result = await agent.run()
print(result)
asyncio.run(main())
|
关键配置说明
BrowserProfile 配置:
| 参数 |
作用 |
headless=True |
无头模式运行,不显示浏览器窗口 |
--no-sandbox |
禁用沙箱(容器环境常用) |
--disable-setuid-sandbox |
禁用 setuid 沙箱 |
--disable-dev-shm-usage |
避免 /dev/shm 空间不足问题 |
--disable-gpu |
禁用 GPU 加速 |
--remote-debugging-port=9222 |
指定 CDP 调试端口 |
LLM 配置:
使用 OpenAI 兼容接口,通过 base_url 指向本地代理服务器(端口 9900),模型指定为 gpt-5.4。这种方式可以很方便地对接各种 OpenAI 兼容的服务。
运行结果分析
执行 python3 ./demo002.py 后,输出如下关键日志:
初始化阶段
1
2
3
|
INFO [Agent] 🎯 Task: 打开 https://example.com 并告诉我页面标题
INFO [Agent] Starting a browser-use agent with version 0.12.6, with provider=openai and model=gpt-5.4
INFO [BrowserSession] Setting viewport to 1024x768 with device scale factor 1.0
|
Agent 自动识别任务中的 URL,并将其作为初始动作加入执行队列。
执行阶段
1
2
3
4
5
|
INFO [Agent] 📍 Step 1:
INFO [Agent] 👍 Eval: 已成功打开目标页面,并且从当前页面内容可直接看到标题。Verdict: Success
INFO [Agent] 🧠 Memory: 当前位于 https://example.com/。页面可见主标题为"Example Domain"。
INFO [Agent] 🎯 Next goal: 向用户返回页面标题。
INFO [Agent] ▶️ done: text: 页面标题是:Example Domain, success: True, files_to_display: None
|
Agent 的执行流程非常清晰:
- 自动导航:Agent 识别出任务中的 URL,自动执行
navigate 动作
- 页面评估:LLM 评估当前页面状态,确认已成功打开目标页面
- 记忆更新:记录当前位置和关键信息(页面标题)
- 任务完成:调用
done 动作,返回结果
最终结果
1
2
3
4
|
📄 Final Result:
页面标题是:Example Domain
INFO [Agent] ✅ Task completed successfully
|
任务成功完成,Agent 正确识别并返回了页面标题。
完整结果对象
result 变量是一个 AgentHistoryList 对象,包含完整的执行历史:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
AgentHistoryList(
all_results=[
ActionResult(
is_done=False,
success=None,
extracted_content='🔗 Navigated to https://example.com',
# ...导航结果
),
ActionResult(
is_done=True,
success=True,
judgement=JudgementResult(
reasoning='用户任务有两个关键点:1) 打开 https://example.com;2) 告诉用户页面标题。...',
verdict=True
),
extracted_content='页面标题是:Example Domain',
# ...最终结果
),
],
all_model_outputs=[
{'navigate': {'url': 'https://example.com', 'new_tab': False}},
{'done': {'text': '页面标题是:Example Domain', 'success': True}},
]
)
|
这个结果对象非常重要,它包含了:
- 每一步的执行结果
- LLM 的判断推理过程
- 最终输出内容
- 完整的模型调用历史
中途中断的情况
result.txt 中还记录了另一个测试(main.py),使用 Ctrl+C 中断了执行:
1
2
3
4
5
|
INFO [Agent] 🎯 Task: 打开 https://example.com 并告诉我页面标题
^C
⏸️ Paused the agent and left the browser open.
Press [Enter] to resume or [Ctrl+C] again to quit.
|
browser-use 支持 暂停/恢复 机制,按下 Ctrl+C 会暂停 Agent,保留浏览器状态,方便调试。再按一次 Ctrl+C 则完全退出。
关键要点总结
1. 任务自动解析
Agent 能够自动从自然语言任务中提取 URL,并作为初始动作执行,无需手动编写导航代码。
2. 执行过程透明
每一步都有详细的日志输出,包括:
Eval:LLM 对当前状态的评估
Memory:累积的上下文信息
Next goal:下一步目标
- 具体执行的动作
3. 结果结构清晰
最终结果通过 done 动作返回,包含 text(输出文本)和 success(是否成功)两个关键字段。
4. 兼容接口灵活
通过 base_url 参数,可以轻松对接任何 OpenAI 兼容的服务,包括本地模型、代理服务等。
5. 调试友好
- 支持暂停/恢复
- 保留浏览器状态
- 完整的执行历史记录
- CDP 端口可指定,方便远程调试
常见问题与解决
页面加载超时
日志中出现了警告:
1
|
WARNING [BrowserSession] ⚠️ Page readiness timeout (8.0s, 8690ms) for https://example.com
|
这是因为在 8 秒内页面未触发 load 事件,但 browser-use 会继续执行,通常不影响后续操作。
无头模式下的调试
如果需要在无头模式下调试,可以:
- 设置
headless=False 显示浏览器窗口
- 指定
--remote-debugging-port 后,可用 Chrome DevTools 连接调试
使用自己的 LLM 服务
只需修改 base_url 和 model 参数:
1
2
3
4
5
|
llm = ChatOpenAI(
model="自定义模型名",
base_url="http://你的服务地址/v1",
api_key="你的密钥",
)
|
总结
通过这个简单的 demo002.py 示例,我们可以看到 browser-use 的核心工作流程:
- 配置 → BrowserProfile(浏览器参数)+ LLM(模型配置)
- 执行 → Agent 自动解析任务、规划步骤、执行动作
- 结果 → 结构化的输出,包含完整执行历史
这个示例虽然简单,但涵盖了 browser-use 的核心用法。基于此,你可以扩展到更复杂的场景:多步骤任务、表单填写、数据提取等。
参考链接
本文基于 /home/ubuntu/test/demo002.py 和 result.txt 的实际运行结果整理。