AI 工具 | | 约 17 分钟 | 6,544 字

browser-use 项目分析:让 AI 控制浏览器

80K+ Stars 的开源项目,让 AI 能够自主操作网页

什么是 browser-use?

今天要介绍的 browser-use 是一个让人眼前一亮的开源项目,已经在 GitHub 上收获了 80K+ Stars。简单来说,browser-use 是一个让 AI 能够像人类一样控制浏览器的库。你可以把它想象成一个桥梁,连接了大语言模型和真实的网页操作。

传统的浏览器自动化工具(如 Selenium、Puppeteer)需要我们预先编写好每一步的操作指令。而 browser-use 的独特之处在于,我们可以给 AI 一个高层次的目标,比如「去 Google 搜索最新的 AI 新闻,然后打开第一篇文章,把标题和摘要发给我」,AI 就会自主规划并执行一系列浏览器操作来达成这个目标。

这个概念非常强大,因为它将浏览器自动化提升到了一个全新的抽象层次。我们不再需要编写详细的操作步骤,只需要告诉 AI 我们想要什么结果,它会自己想办法完成。

工作原理深度解析

1. Playwright 为底层驱动

browser-use 的底层使用的是 Playwright,这是一个由 Microsoft 开发的浏览器自动化库。相比 Selenium,Playwright 更加现代、速度更快,而且对现代 Web 技术的支持更好。

Playwright 提供了稳定的浏览器控制能力,包括:

  • 页面导航和加载
  • 元素定位和交互
  • 截图和录屏
  • 网络请求拦截
  • JavaScript 执行

browser-use 在 Playwright 的基础上封装了一层 AI 决策逻辑,让我们可以用自然语言来控制浏览器。

2. Agent 架构设计

browser-use 的核心是一个 Agent(代理)架构。这个 Agent 接收用户的高层次指令,然后通过以下循环来完成任务:

1. 观察当前网页状态
2. 分析目标与现状的差距
3. 决定下一步操作(如点击、输入、滚动等)
4. 执行操作
5. 检查是否达成目标,否则重复步骤 1-4

这个过程和我们人类使用浏览器的方式非常相似。我们看到页面、思考接下来要做什么、然后点击或输入、最后检查结果。browser-use 让 AI 模拟了这个完整的思考和执行过程。

3. 视觉理解能力

browser-use 还能「看到」网页的内容。它使用了计算机视觉技术来分析页面截图,让 AI 不仅能获取 HTML 内容,还能理解页面的视觉呈现。这对于处理动态加载的内容、单页面应用(SPA)等场景特别有用。

核心功能一览

browser-use 提供了丰富的功能,让我们能够构建各种浏览器自动化场景:

功能描述
页面导航自动打开 URL,支持等待页面加载
元素交互点击、输入、选择等常见操作
内容提取从网页中提取文本、链接、图片等
表格处理识别和提取表格数据
自动填写和提交表单
单填写截图
等待机制智能等待元素出现或消失
滚动自动滚动页面加载更多内容

快速开始指南

安装

首先,我们需要安装 browser-use:

pip install browser-use

同时需要安装 Playwright 及其依赖:

pip install playwright
playwright install chromium

基础使用示例

让我们来看一个最简单的例子:

from browser_use import Agent, BrowserConfig
from langchain_openai import ChatOpenAI

# 初始化语言模型
llm = ChatOpenAI(model="gpt-4")

# 配置浏览器
browser_config = BrowserConfig(
    headless=False,  # 设置为 True 可以无头模式运行
)

# 创建 Agent
agent = Agent(
    llm=llm,
    browser_config=browser_config,
)

# 给定任务
agent.run("打开 Google,搜索 'AI 最新新闻',然后打开第一个结果,把标题告诉我")

这就是一个完整的 AI 浏览器控制程序!agent 会自动打开浏览器、执行搜索、点击链接、提取信息。

处理更复杂的任务

browser-use 的强大之处在于处理复杂任务的能力:

from browser_use import Agent, BrowserConfig
from langchain_anthropic import ChatAnthropic

llm = ChatAnthropic(model="claude-sonnet-4-20250514")

agent = Agent(
    llm=llm,
    browser_config=BrowserConfig(headless=False),
)

# 更复杂的多步骤任务
task = """
1. 打开 https://github.com/trending
2. 等待页面加载完成
3. 找出今天最热门的 Python 项目
4. 点击进入该项目主页
5. 提取项目的描述、Stars 数量和主要语言
6. 把结果整理成表格格式返回
"""

agent.run(task)

browser-use 会自动处理页面加载等待、元素识别、点击导航等所有细节。

实际应用场景

1. 自动化测试

在软件测试领域,browser-use 可以大大简化端到端测试的编写:

# 自动化测试示例
test_task = """
1. 打开登录页面 http://localhost:3000/login
2. 输入用户名 'test@example.com' 和密码 'password123'
3. 点击登录按钮
4. 等待页面跳转到 Dashboard
5. 验证页面上显示 'Welcome, test@example.com'
6. 截图保存测试结果
"""

agent = Agent(llm=llm, browser_config=BrowserConfig(headless=True))
agent.run(test_task)

相比传统的测试框架,browser-use 的测试用例更加易读,而且 AI 能够处理页面变化带来的各种情况。

2. 数据采集

对于需要从多个网页收集数据的场景,browser-use 非常有用:

data_collection_task = """
1. 打开 Amazon 首页
2. 搜索 'wireless headphones'
3. 等待搜索结果加载
4. 提取前 10 个商品的名称和价格
5. 把结果保存为 JSON 格式
"""

agent = Agent(llm=llm)
result = agent.run(data_collection_task)
print(result)

AI 会自动处理翻页、滚动、加载更多等操作,完成数据采集。

3. 流程自动化

我们可以将各种重复性的浏览器操作自动化:

automation_task = """
1. 打开邮箱
2. 登录账号
3. 打开最新的一封邮件
4. 如果是重要邮件,标记为星标
5. 回复 '已收到,谢谢'
6. 标记为已读
7. 退出登录
"""

agent = Agent(llm=llm)
agent.run(automation_task)

4. 内容监控

定期检查某些网页的内容变化:

monitor_task = """
1. 打开 Product Hunt 首页
2. 找出今天的产品
3. 提取每个产品的名称和简介
4. 如果有 AI 相关的产品,记录下来
5. 发送总结报告
"""

# 可以设置为定时任务定期执行
schedule.every().day.at("09:00").do(lambda: agent.run(monitor_task))

与传统自动化的对比

传统的浏览器自动化(如 Selenium)和 browser-use 有很大的区别:

特性Selenium/Playwrightbrowser-use
控制方式编程式,需要详细步骤声明式,只需描述目标
错误处理需要手动编写AI 自动处理
页面变化容易失败AI 能够适应
学习成本较高较低
灵活性非常高受限于 AI 能力
执行速度相对较慢(AI 决策需要时间)

简单来说:

  • 传统自动化 像是编写剧本,每个场景都要精确安排
  • browser-use 像是给 AI 一个任务描述,让它自己想办法完成

两者各有优劣:传统方式更适合稳定、可预测的流程;browser-use 则更适合复杂多变的场景。

进阶使用技巧

1. 自定义工具扩展

我们可以为 Agent 添加额外的工具:

from browser_use import Agent, BrowserConfig
from browser_use.tool import Tool

# 定义自定义工具
def save_to_file(content: str, filename: str):
    """保存内容到文件"""
    with open(filename, 'w', encoding='utf-8') as f:
        f.write(content)
    return f"已保存到 {filename}"

# 创建带自定义工具的 Agent
agent = Agent(
    llm=llm,
    browser_config=BrowserConfig(),
    tools=[
        Tool(
            name="save_to_file",
            description="保存内容到文件",
            function=save_to_file
        )
    ]
)

2. 会话管理

browser-use 支持保存和恢复会话:

# 保存会话
agent.save_session("my_session.json")

# 恢复会话
agent.load_session("my_session.json")

这对于长时间运行的任务或者需要分步执行的操作非常有用。

3. 视觉反馈

我们可以让 Agent 在执行过程中截图:

config = BrowserConfig(
    headless=False,
    snapshot=True,  # 启用快照功能
)

agent = Agent(llm=llm, browser_config=config)

# 执行任务时可以实时查看 AI 看到了什么
for step in agent.run_with_steps("搜索 AI 新闻"):
    print(f"步骤 {step.number}: {step.action}")
    if step.screenshot:
        print(f"截图: {step.screenshot}")

4. 上下文保持

对于需要多轮交互的任务,我们可以保持上下文:

# 第一轮
agent.run("打开 Gmail,登录账号")

# 第二轮(在第一轮基础上继续)
agent.run("打开收件箱,找到最新的一封邮件")

# Agent 会记住之前的浏览器状态

注意事项和限制

1. 执行速度

由于 AI 需要时间来分析和决策,browser-use 的执行速度会比传统自动化慢。如果需要处理大量重复性任务,可能需要考虑其他方案。

2. 成本考量

每次任务执行都需要调用 LLM API,这会产生相应的费用。对于频繁使用的场景,需要考虑成本控制。

3. 可靠性

虽然 browser-use 能够处理很多复杂情况,但并非完美。有时 AI 可能会做出错误的决策,导致任务失败。对于关键业务场景,建议添加验证步骤。

4. 反爬虫机制

很多网站有反爬虫机制,browser-use 也可能受到影响。在使用时请务必遵守网站的使用条款。

5. 安全风险

和所有自动化工具一样,browser-use 也可能被用于不当目的。请确保只在获得授权的情况下使用自动化功能。

与其他工具的集成

browser-use 可以和其他 AI 工具无缝配合:

与 LangChain 集成

from langchain import LLMChain
from browser_use import Agent

# 创建 LangChain 链
chain = LLMChain(llm=llm, prompt=some_prompt)

# 结合 browser-use
agent = Agent(llm=llm)
result = agent.run("获取天气信息")
weather_info = chain.run(result)

与 MCP 协议结合

browser-use 可以作为 MCP Server,为 Claude Code 等 AI 助手提供浏览器控制能力:

from mcp.server import Server
from browser_use import Agent

# 启动 MCP Server
app = Server("browser-use")
app.run()

这样我们就可以在 Claude Code 中直接使用自然语言控制浏览器了!

总结

browser-use 为我们打开了一扇新的大门,让我们能够用自然语言来控制浏览器完成各种任务。80K+ Stars 的认可证明了它的价值和潜力。

对于需要构建浏览器自动化解决方案的开发者来说,browser-use 提供了一种全新的思路:与其编写详细的操作指令,不如给 AI 一个目标,让它自己想办法达成。

当然,作为一项相对较新的技术,browser-use 还有很大的发展空间。我们期待看到它在未来的迭代中变得更快、更智能、更可靠。


「技术的进步总是让看似复杂的事情变得简单。browser-use 正是这样的例子——它让浏览器自动化不再是程序员的专属技能,而是每个人都能使用的强大工具。」

评论

加载中...

相关文章

分享:

评论

加载中...