2026 年是 AI agent 不再只是 demo 的一年。browser-use、OpenAI 的 Operator 式 agent、Anthropic 的 computer use,以及十几个基于 Playwright 搭起来的框架,如今都在驱动真实浏览器去访问真实网站——订票、下单、调研、监控。而它们全都撞上同一堵墙:它们操作的那些网站把它们当作机器人,因为它们就是机器人。
这篇指南专门讲驱动浏览器的 AI agent 的代理层。如果你的 agent 用的是 HTTP 库而不是浏览器(LangChain 工具、CrewAI 里的爬虫),请看 AI Agent 代理实战:LangChain、AutoGPT 与 CrewAI——本文讲的是控制完整浏览器的 agent。
反直觉但确实如此:一个驱动真实 Chrome 浏览器的 LLM agent,往往比一个朴素的 Python 爬虫被封得更快。三个原因:
navigator.webdriver、CDP 特有的时序痕迹以及 headless 的破绽。再叠加一个被标记的 IP,分数瞬间就越过封禁阈值。这三者里 IP 是最便宜的修复项,而且光修它就能解决大部分封禁:把 agent 的流量走住宅代理,让 IP 的故事和浏览器的故事对得上。
browser-use 跑在 Playwright 之上,所以原生支持代理。模式是:每个 agent 任务一个 sticky 会话,让 IP 在 agent 干活期间保持稳定,下一个任务再换一个新 IP。
from browser_use import Agent, Browser, BrowserConfig
from langchain_openai import ChatOpenAI
import uuid
task_id = uuid.uuid4().hex[:8]
browser = Browser(config=BrowserConfig(
proxy={
"server": "http://us.jibaoproxy.com:913",
"username": f"USERNAME-session-{task_id}", # sticky:本任务内保持同一个 IP
"password": "PASSWORD",
},
))
agent = Agent(
task="Find the current price of the Sony WH-1000XM6 on the three largest US retailers.",
llm=ChatOpenAI(model="gpt-4o"),
browser=browser,
)
result = await agent.run()
关键细节是那个 session-{task_id} 后缀。没有它,轮换网关可能在任务中途给 agent 换一个新 IP——购物车清空、登录掉线,agent 白白浪费 LLM 调用去重做步骤。有了它,整个任务从头到尾跑在一个 IP 上,下一个任务再拿一个干净的。
如果你是在 Playwright 上自建的 agent 循环(大多数 Operator 式和 computer-use 实现背后的模式),代理就配在浏览器 context 上:
from playwright.async_api import async_playwright
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
context = await browser.new_context(
proxy={
"server": "http://us.jibaoproxy.com:913",
"username": "USERNAME-session-agent42",
"password": "PASSWORD",
},
viewport={"width": 1366, "height": 768},
locale="en-US",
timezone_id="America/Chicago", # 与代理所在国家匹配
)
page = await context.new_page()
# ... agent 循环:截图 -> LLM -> 动作 -> 重复
把 locale 和 timezone_id 设成与代理所在国家匹配。一个从美国 IP 浏览、却带着 UTC+8 时钟的 agent,是行为系统会给你扣分的不一致。
按 context 配代理还能让你做到一个浏览器,多个 agent:每个 new_context() 都能带自己的 session 后缀,于是十个并发的 agent 任务可以跑在十个不同的住宅 IP 上,而不需要起十个 Chrome 进程。
| Agent 工作负载 | 会话策略 | 原因 |
|---|---|---|
| 调研 / 比价(无需登录) | Sticky,10 分钟,每任务换新会话 | 任务内稳定,跨任务换新 IP |
| 登录态账号操作 | Sticky 30 分钟,每次运行用同一个 session ID | 网站会标记两次登录之间跨国跳变的账号 |
| 结账 / 订购流程 | Sticky 30 分钟 | 结账中途换 IP 会让会话失效并触发风控审核 |
| 大批量监控(数百页) | 轮换,不钉会话 | 最大化 IP 多样性,没有状态需要保留 |
住宅流量按 GB 计费,而浏览器 agent 会拉取完整页面——图片、字体、追踪脚本——这和 HTTP 爬虫不同。不加管理的话,一个 agent 任务能吃掉 20–50 MB。三个修复办法,按影响大小排序:
await context.route("**/*.{png,jpg,jpeg,webp,gif,woff,woff2,mp4}",
lambda route: route.abort())
如果你的 agent 读截图,就在目标页保留图片,但仍然拦掉视频和字体。如果它读 DOM/无障碍树,那图片也一起拦——能砍掉 60–80% 的流量。开启图片拦截和按需路由后,典型的浏览器 agent 任务能落在 2–8 MB 区间——按 $2/GB 算,每一百个任务也就几美分。
实话实说环节。住宅 IP 能修复 ASN 不匹配和 IP 信誉问题,这是 2026 年反爬打分里最重的单一信号。但它修复不了:
requests「直接重放」agent 的请求。见 JA3/JA4 详解。把这三样都叠在一个住宅 IP 上,浏览器 agent 就能通过真实用户同样的检查。对于最硬的目标(DataDome、PerimeterX),见我们的 DataDome/PerimeterX 指南。
timezone_id/locale 对齐到代理所在国家。新用户注册即送500M免费流量,首次充值额外加赠,活动期间限时开放。