browser-use 配住宅代理教程
发布:2026 年 7 月 23 日 · 阅读约 6 分钟
一句话总结: browser-use 让 LLM 驱动一个真实 Chromium 浏览器去完成任务,所以它的指纹本来就像真人——但它仍然从你服务器的机房 IP 出去,而这一眼就会被反爬系统标记。把住宅代理通过 Playwright 的代理配置传进去:{"server": "http://gw.roamproxy.com:41080", "username": ..., "password": ...}。同时跑很多 agent 时,给每个分配各自的粘性住宅 IP,别让它们被关联到一起。
agent 有真实浏览器,网络却看起来是假的
browser-use 把一个真实 Chromium 浏览器的控制权交给 LLM,由它点击、输入、读页面,完成你用自然语言描述的任务。因为是真实浏览器,指纹——TLS 握手、JavaScript 环境、渲染——都是真的。这比裸 HTTP 爬虫领先一大截。
但浏览器总要跑在某个地方,而这个地方通常是机房 IP 上的云虚机。反爬系统在评估浏览器行为之前,先给出口 IP 的 ASN 打分,所以一个完美浏览器从 AWS 或 Hetzner 网段出去,照样被标记。browser-use 唯一替你修不了的一层,就是它出口的网络。这是代理的活。
安装
pip install browser-use
playwright install chromium
让 agent 走住宅代理
browser-use 把代理设置直接透传给 Playwright,所以值就是 Playwright 的代理 dict:一个纯 server URL 加独立的 username、password 键。别把凭据塞进 server URL——Playwright 从独立字段读取。
from browser_use import Agent, Browser, BrowserConfig
from langchain_openai import ChatOpenAI
browser = Browser(
config=BrowserConfig(
proxy={
"server": "http://gw.roamproxy.com:41080",
"username": "YOUR_USERNAME",
"password": "YOUR_PASSWORD",
}
)
)
agent = Agent(
task="Open example.com and summarize what the company does",
llm=ChatOpenAI(model="gpt-4o"),
browser=browser,
)
await agent.run()
现在 agent 的浏览器从真实家庭宽带 IP 出去。LLM 仍然决定做什么;代理决定流量在链路上长什么样,两者独立配置。
封装类名在 browser-use 版本间会变(BrowserConfig、BrowserProfile、BrowserSession)。永远不变的是上面代理 dict 的形状——server / username / password。如果新版本改了封装名,保留这个 dict,去当前文档查它现在挂在哪。
跑多个时,一 agent 一 IP
browser-use 真正有意思的用法是跑一整队 agent——一账号一个、一任务一个、一市场一个。如果它们全共用一个出口 IP,访问的站点就能把它们关联起来,你又把想避免的足迹重新拼了出来。给每个 agent 各自的粘性住宅会话,让它的出口 IP 在任务期间稳定且独立。
会话在代理用户名里选;粘性与轮换会话怎么由会话串控制,见 什么是轮换代理。给每个 agent 分配不同的粘性会话,任意两个 agent 都不会共用出口。
信任前先验证出口
让 agent 的第一个任务打开 IP 检测页,把结果读回来:
agent = Agent(
task="Go to https://ip.sb and tell me the IP address and country shown",
llm=ChatOpenAI(model="gpt-4o"),
browser=browser,
)
print(await agent.run())
它应该报出 Roam 住宅出口 IP 和你选的国家,而不是服务器的真实地址。如果报的是真实 IP,说明代理配置没到 Playwright——回头检查 dict 形状,以及你把它挂在了哪个对象上。
光有浏览器不够的时候
browser-use 靠真实浏览器解决指纹,住宅代理解决 IP。但如果你做的是脚本式(非 agent)采集、没有真实浏览器——纯 Python HTTP 请求——你就丢了指纹优势,得用别的办法补回来,见 用 curl_cffi 绕过 TLS/JA3 指纹检测。请求被封的更多原因,见 网页采集如何避免被封。
常见问题
browser-use 不是已经像真人了吗,为什么还要代理?
它的浏览器像真人,因为它驱动的是真实 Chromium 实例,指纹是真的。但网络不是:请求仍然从你跑 agent 的地方出去,通常是机房 ASN 上的云服务器,而反爬系统在看别的之前就先标记它。代理修的正是浏览器修不了的那一层——出口 IP。真实指纹 + 真实住宅 IP,才是真正能过的组合。
我并行跑 20 个 agent,需要不同 IP 吗?
如果这些站点不该把它们关联起来,那就需要。20 个 agent 走一个 IP,看起来就是一台机器开了 20 个会话,这正是关联账号或触发限速的模式。给每个 agent 各自的粘性住宅会话,让它在任务期间有稳定、独立的出口 IP。Roam 按 GB 计费,不按 IP 也不按 agent,所以把 agent 数量扩上去不会让订阅费翻倍。
换不同的 LLM 后端,代理配置一样吗?
一样。代理在浏览器这一层,和驱动 agent 的是哪个模型完全无关——OpenAI、Anthropic、本地模型,不管你把什么传给 llm 都行。LLM 决定做什么;浏览器(和它的代理)决定流量在链路上长什么样。两者分开配置。
我的 agent 代理配置不生效,哪里错了?
最常见的原因是把代理传给了错的对象。browser-use 的封装 API 在不同版本间变过(BrowserConfig、BrowserProfile、BrowserSession),但你传的值始终是 Playwright 的代理 dict——server、username、password 三个独立键,server 是纯 http://主机:端口,不要把凭据塞进 URL。一旦你在 server 串里写 user:pass@host,Playwright 会忽略认证。具体封装看当前 browser-use 文档,但 dict 的形状保持这里这样。
browser-use 给你的 agent 一个真实浏览器,Roam 给它一个真实网络身份。轮换住宅 $2/GB、静态住宅 $4/IP/月,HTTP 与 SOCKS5 都支持,直接塞进下面的 Playwright 代理配置。注册账号即送 300MB 试用流量,让你第一个 agent 从住宅出口跑起来。