周五晚上 7 点,我刚把外卖拆开,手机“叮”一声。
老板发来一句话:
“小王,周一要开会,你去收集下 50 个竞品的定价策略。”
我盯着屏幕愣了两秒,脑子里已经开始自动播放画面:打开 50 个网站、挨个找 Pricing、复制粘贴、整理表格、截图留证……别说周末了,我今晚都别想睡。
更要命的是,传统方案我都试过:
-
写爬虫?不少 SaaS 官网套了 Cloudflare,反爬一上来就把你当“坏人”。
-
纯手动?不是做不完,是做完人就没了。
-
RPA 录制?看起来优雅,实际一改版就报废,维护成本比写代码还高。
那一刻我突然意识到:这不是“能不能做”的问题,是“有没有更像人类的方式做”。
然后我刷到一个东西——browser-use。
我第一反应是:这玩意儿是不是又是那种“宣传视频里很丝滑,自己跑起来像抽风”的工具?
但我抱着“死马当活马医”的心态装了装。
结果很离谱:我花了大概 3 小时写完脚本,AI 自己跑了一晚上;周六早上醒来,数据已经躺在 Excel 里了。
甚至还顺带把每家套餐差异做了个简单归类,开会材料直接能用。
所以我想把这次经历写下来:不是炫技,也不是种草贴——就是一份真正在业务里能落地的记录:怎么用、怎么写、哪里会翻车、什么场景别碰。

一、一个真实的周五晚上
1.1 场景重现
-
老板突然发来消息:“小王,周一要开会,你去收集下 50 个竞品的定价策略。”
-
我的内心 OS:周五晚上 7 点,这是要我手动打开 50 个网站一个个复制粘贴?
-
传统方案的困境:
-
爬虫?很多网站有反爬
-
手动?累死我也做不完
-
RPA 工具?录制脚本太繁琐,网站一改版就失效
1.2 然后我发现了 browser-use
-
第一反应:这玩意儿真能让 AI 自己操作浏览器?
-
半信半疑装上试试
-
结果:3 小时写完代码,AI 自己跑了一晚上,周六早上醒来数据已经躺在 Excel 里
1.3 为什么要写这篇文章
-
不是来吹牛的,是真的解决了我的问题
-
分享完整的踩坑经验和实战代码
-
告诉你哪些场景适合用,哪些不适合
二、browser-use 到底是个什么东西?
2.1 一句话说清楚
把 LLM(大语言模型)装进浏览器里,让 AI 像你一样点击、输入、滚动页面,还能自己决定下一步该干什么。
你可以把它理解成:你不是在写“爬虫规则”,而是在雇一个会用浏览器的实习生。你只需要把任务说清楚,它自己去找按钮、点链接、翻页、抓信息。
2.2 和传统工具的对比
【传统爬虫】
你:写正则表达式,找XPath,处理反爬
坏处:网站改版就废了
【RPA工具(如UiPath)】
你:录制每一步操作
坏处:不灵活,遇到验证码就卡住
【browser-use】
你:告诉AI"去某网站找价格"
AI:自己分析页面,点击按钮,填表单,提取数据
2.3 核心能力(用人话说)
-
看懂网页:把 HTML 渲染成 AI 能理解的结构
-
自主决策:不需要你写 if-else,AI 自己判断要点哪个按钮
-
容错性强:页面结构变了,AI 会自适应
-
多步骤任务:能完成“登录→搜索→翻页→提取”这种复杂流程
三、先别急着装,我们聊聊原理(5 分钟看懂)
3.1 整个系统长什么样
【你的指令】
↓
【LLM大脑(GPT-4/Claude)】
↓
【browser-use中间件】
↓
【Playwright控制浏览器】
↓
【真实的Chrome窗口】
它的思路很直白:LLM 负责“想”,Playwright 负责“做”。browser-use 做中间翻译:把网页“整理成 AI 看得懂的样子”,再把 AI 的动作变成真实的点击/输入。
3.2 关键流程拆解(配流程图)
第 1 步:AI“看”网页
-
不是直接读 HTML 源码(太长了,LLM 吃不消)
-
用 Accessibility Tree(无障碍树)简化页面结构
-
只保留可交互元素:按钮、输入框、链接
举个例子:
“`
原始HTML:3000行
简化后:
-
Button: "登录" (id=login-btn)
-
Input: "用户名" (id=username)
-
Input: "密码" (id=password)
-
Link: "忘记密码" (id=forgot)
**第 2 步:AI 决策**
LLM 看到简化后的页面 + 你的目标,然后判断下一步:
比如“要登录,先填用户名”,输出动作:`fill(id=username, value="myname")`
**第 3 步:执行动作**
browser-use 把动作翻译成 Playwright 命令,真实操作浏览器,并把截图/状态回传给 AI:“我已经填好用户名了。”
**第 4 步:循环迭代**
AI 看新页面继续做下一步,直到任务完成。
### 3.3 为什么这个设计很聪明?
– **省 Token**:不喂全部 HTML 给 LLM
– **提高准确率**:只让 AI 关注能操作的元素
– **适应性强**:网页改版了,AI 往往还能找到“登录按钮”这类关键点
—
四、10 分钟上手:从安装到第一个脚本跑起来
4.1 环境准备(别慌,很简单)
你需要:
– Python 3.11+(建议 3.12)
– 一个 OpenAI API Key 或 Claude API Key
– 5 分钟耐心
安装命令:
“`bash
# 1. 安装browser-use
pip install browser-use
# 2. 安装Playwright(控制浏览器的底层库)
playwright install chromium
# 3. 装个辅助库(可选,方便异步操作)
pip install asyncio
常见问题:
-
“playwright install 失败”:多半网络问题,挂代理或换源
-
“chromium 下载慢”:可以试
playwright install --with-deps chromium
4.2 第一个脚本:让 AI 帮你搜东西
场景:我想知道 GitHub 上 browser-use 有多少 star
“`python
import asyncio
from langchain_openai import ChatOpenAI
from browser_use import Agent
async def main():
llm = ChatOpenAI(
model="gpt-4o",
api_key="你的API Key"
)
agent = Agent(
task="去GitHub搜索browser-use项目,告诉我有多少个star",
llm=llm
)
result = await agent.run()
print(result)
asyncio.run(main())
“`
运行效果基本是“看热闹式震撼”:
Chrome 自动打开 → 进 GitHub → 搜索 → 点项目 → 找 star → 回答你。
第一次跑的注意事项:
-
Chrome 会弹出来,别关掉,那是 AI 在工作
-
速度取决于网速和模型响应,一般 20–30 秒
-
如果你在公司网环境,偶尔会卡在 GitHub 的验证页面,这不是你的错
4.3 加点料:把数据保存下来
import asyncio
import json
from langchain_openai import ChatOpenAI
from browser_use import Agent
async def main():
llm = ChatOpenAI(model="gpt-4o")
agent = Agent(
task="""
去GitHub搜索browser-use,提取以下信息:
1. Star数量
2. Fork数量
3. 最近一次提交时间
把结果保存成JSON格式
""",
llm=llm
)
result = await agent.run()
with open("github_data.json", "w", encoding="utf-8") as f:
json.dump(result, f, indent=2, ensure_ascii=False)
print("数据已保存到 github_data.json")
asyncio.run(main())
这里有个小经验:你越明确它输出什么格式,后面越省时间。别指望 AI 自动替你“整理成你想要的样子”,你得提前把标准定好。
五、实战案例:解决真实业务问题
5.1 案例 1:竞品价格监控(我周五遇到的问题)
需求描述:
-
每周监控 50 个竞品 SaaS 的定价
-
记录价格变化
-
自动发送报告
核心脚本(先跑通 5 个再扩大,别一上来就 50 个并发把自己封了):
“`python
import asyncio
from browser_use import Agent
from langchain_openai import ChatOpenAI
import pandas as pd
from datetime import datetime
competitors = [
{"name": "Notion", "url": "https://notion.so/pricing"},
{"name": "Airtable", "url": "https://airtable.com/pricing"},
]
async def scrape_competitor(competitor):
llm = ChatOpenAI(model="gpt-4o")
agent = Agent(
task=f"""
访问 {competitor['url']}
提取所有付费套餐的价格,格式:
{{
"套餐名称": "价格",
"套餐名称2": "价格2"
}}
""",
llm=llm
)
result = await agent.run()
return {
"competitor": competitor["name"],
"pricing": result,
"timestamp": datetime.now()
}
async def main():
tasks = [scrape_competitor(c) for c in competitors[:5]]
results = await asyncio.gather(*tasks)
df = pd.DataFrame(results)
df.to_excel(f"pricing_{datetime.now().strftime('%Y%m%d')}.xlsx", index=False)
print("抓取完成!")
asyncio.run(main())
“`
实际效果(以我当时的数据为例):
-
5 个网站,8 分钟左右跑完
-
Cookie 弹窗、订阅弹窗大多数能自己处理
-
准确率 90%+(剩下那 10% 通常是页面设计太“反人类”)
踩坑记录(真踩过):
-
坑 1:并发太高被 Cloudflare 拦 → 降并发 + 每个任务加随机间隔
-
坑 2:有些网站要点“See Pricing”才显示价格 → task 里写清楚“如果没看到价格先找入口”
-
坑 3:价格格式不统一 → 让它按 JSON 输出,并要求统一币种/周期(例如统一成“USD/月”)
5.2 案例 2:招聘信息批量收集
场景:HR 让你去 Boss 直聘收集 “AI 工程师” 岗位薪资范围
“`python
async def scrape_jobs():
llm = ChatOpenAI(model="gpt-4o")
agent = Agent(
task="""
1. 访问 Boss直聘
2. 搜索"AI工程师"
3. 提取前30个岗位的:公司名、薪资、要求
4. 保存为CSV格式
""",
llm=llm
)
result = await agent.run()
return result
“`
实际心得:
-
登录最好手动做,拿 Cookie 给它用(不然验证码能把你折磨到怀疑人生)
-
滚动加载的页面,要写明“向下滚动直到加载 30 条”
-
数据清洗还是要你自己过一遍,尤其是岗位标题/薪资这种花样很多
5.3 案例 3:自动化测试(我的副业)
场景:测试自己网站表单提交流程
“`python
async def test_form_submission():
agent = Agent(
task="""
1. 访问 http://localhost:3000/contact
2. 填写表单:
– 姓名:Test User
– 邮箱:test@example.com
– 留言:This is a test message
3. 点击提交
4. 检查是否出现"提交成功"提示
5. 截图保存为 test_result.png
"""
)
“`
比 Selenium 香的点很现实:
-
不用写一堆定位器
-
页面小改版不至于全军覆没
-
你可以用“人说的话”写用例,迭代速度很快
六、进阶技巧:让 AI 更聪明
6.1 优化 Task 描述(最重要)
差的写法:
“`python
task = "帮我抓点数据"
“`
好的写法(像在带实习生):
“`python
task = """
目标:提取Amazon商品评论
步骤:
-
访问 {product_url}
-
滚动到评论区
-
点击"查看更多评论"按钮3次
-
提取前50条评论的:星级、日期、内容
-
返回JSON格式:[{"rating": 5, "date": "2024-01-01", "text": "…"}]
"""
“`
总结一句:写清楚步骤 + 写清楚停止条件 + 写清楚输出格式,成功率会直接上一个台阶。
6.2 处理复杂交互
下拉菜单、日期选择器这类“人类觉得简单,脚本写起来很烦”的交互,反而是它的舒适区:
“`python
task = """
-
访问携程机票预订页
-
选择出发地:北京(从下拉菜单选择)
-
选择目的地:上海
-
选择日期:2024年3月15日(使用日期选择器)
-
点击搜索
-
提取最便宜的3个航班信息
"""
“`
6.3 错误处理和重试
from browser_use import Agent, BrowserConfig
agent = Agent(
task="…",
llm=llm,
browser_config=BrowserConfig(
headless=False,
disable_security=True,
),
max_actions_per_step=10,
)
try:
result = await agent.run()
except Exception as e:
print(f"执行失败:{e}")
await agent.browser.screenshot(path="error.png")
我的经验是:调试阶段别 headless。你看着它哪里卡住,比盲猜强太多。
6.4 成本控制(重要)
Token 消耗大概是这样的(按常见任务粗算):
-
每一步操作:~1000 tokens(页面简化 + 决策)
-
平均一个任务:10–20 步
-
单次任务成本:大概 $0.02–0.05(用 GPT-4o)
省钱技巧:
-
简单任务用
gpt-4o-mini -
temperature 设 0,提高稳定性
-
批量任务尽量复用流程,减少“无意义探索”
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-4o-mini",
temperature=0
)
七、哪些场景适合用?哪些不适合?
7.1 ✅ 适合的场景
1)数据采集(最佳场景)
-
竞品监控、招聘信息收集、电商价格对比、新闻汇总
2)自动化测试
-
E2E、回归、UI 交互测试
3)重复性操作
-
表单批量填写、定期报告生成(合法合规前提下)
4)探索性任务
-
“帮我找出这个行业的 Top10 公司”
-
“对比这三个工具的功能差异”
7.2 ❌ 不适合的场景
1)高频实时任务
-
每秒级抓取,用传统爬虫更合适(LLM 反应慢,成本也高)
2)结构化且稳定的数据提取
-
如果页面结构固定,BeautifulSoup/接口抓取更快更便宜
-
browser-use 的优势是“灵活”,不是“极致效率”
3)强验证码场景
-
图片验证码基本别指望
-
滑块偶尔能过,但不稳定,业务上不可靠
4)违法违规操作
-
别拿它做灰产
-
尊重 robots.txt 和网站条款
八、常见问题(我踩过的坑)
8.1 “AI 一直在点同一个按钮,停不下来”
原因:任务描述不清楚,AI 不知道什么时候算完成
解决:写明停止条件
“`python
task = """
点击"加载更多"按钮,直到出现"没有更多内容"提示
或者已经加载了50条数据,就停止
"""
“`
8.2 “执行到一半就卡住了”
原因:页面加载慢,AI 等不及
解决:增加 timeout
“`python
browser_config = BrowserConfig(
timeout=60
)
“`
8.3 “提取的数据格式乱七八糟”
原因:没指定输出格式
解决:给输出模板,最好带示例
“`python
task = """
…
输出格式示例:
{
"title": "商品标题",
"price": 99.99,
"rating": 4.5
}
"""
“`
8.4 “Chrome 一直报错‘无法连接’”
原因:Playwright 没装好或浏览器依赖出问题
解决:
“`bash
playwright install –force chromium
“`
总结:
工具永远只是工具,关键是你拿它解决什么问题。
browser-use 对我最大的价值,不是“更酷”,而是把我从“手动搬砖的人”变成了“给 AI 派活的人”。以前我做竞品分析,80% 时间在复制粘贴;现在我把那 80% 交给自动化,把精力放回到更值钱的部分:判断、归纳、策略。
如果你也经常被“收集一堆网页信息”这种任务折磨,真可以试试:先从 3–5 个网站跑通,再逐步扩到 50 个、100 个。跑通那一刻你会发现,周五晚上也能是周五晚上。


