浏览器 Agent + 网页自动化全家桶
想做一个能替用户上网干活的 agent,这十个就是顺序:browser-use Python skill + Playwright MCP for agents + Browserbase 云端无头 + Obscura 隐身无头 + Pydoll 不用 WebDriver + Scrapling 自适应爬虫 + Firecrawl markdown API + Jina Reader URL→LLM 文本 + Mem0 记忆层 + Apify MCP 调度 8000+ 现成爬虫。端到端 agent 工作流,不只是框架对比。
这个 pack 包含什么
这不是「玩一下午 Browser-Use」用的,是想真把一个替用户上网干活的 agent 推上生产、面对会反爬的网站用的一套组合。TokRepo 上原本的 Browser Automation pack 是框架对比 — 三个 SDK 横评。这个 pack 是下一层:框架 + 无头运行时 + 反爬对抗 + 内容抽取 + 记忆 + 调度,按安装顺序串好。
每个 pick 都负责流水线的一个环节。合起来回答真问题:浏览器在哪跑、怎么不被指纹识别、agent 喂给 LLM 的是什么、跨会话怎么记住事、从一个标签页扩到一万个怎么不用自己写队列。
目标用户是做调研 / 拉名单 / 填表 / 下单 / 监控类 agent 的开发者 — 任何需要 LLM 操作真浏览器、应付登录墙和 Cloudflare、并且跨周累积上下文的场景。
推荐安装顺序(框架 → 无头 → 反爬 → 记忆 → 调度)
- browser-use Python skill — agent 框架。让一个 Agent 用你选的 LLM 操作真浏览器的 Python 工具包。从这里开始是因为它最快让你跑通整个循环:prompt → 页面 → 动作 → DOM → 下一步动作。skill 格式装进 Claude Code / Codex / Gemini CLI 都干净。
- Playwright MCP — Browser Automation for Agents — 协议层入口。把 Playwright 包装成 MCP server,任何懂 MCP 的 agent(Claude Code / Cursor / ChatGPT 桌面)都能直接驱动 Chrome / Firefox / WebKit,不用自己写胶水代码。agent 通过这根线接到浏览器。
- Browserbase — Cloud Browser Infra for AI Agents — 托管无头。一条 HTTPS 起几千个隐身 Chromium 会话,不用 VPS、不用 Docker、也不用为了过 captcha 烧 IP。等你单机 Chrome 不够用又不想运维一个集群的时候上这个。
- Obscura — Headless Browser Built for AI Agents and Web Scraping — 自托管隐身。Browserbase 的 DIY 对应版,数据要留在自己机器、或者要把每会话成本压到 $0 时用。开箱就带反指纹默认值。
- Pydoll — Browser Automation Without WebDriver — 反爬第一层。Bot 检测有个肮脏小秘密:
navigator.webdriver=true这个标志位至今仍能放倒大部分过滤器。Pydoll 直接用 DevTools Protocol 驱动 Chrome,这个标志永远不亮。Cloudflare / DataDome 开始对你的 Playwright 流 403 的时候换它。 - Scrapling — Adaptive Web Scraping Framework for Python — 自适应选择器。网站半夜改 DOM 把爬虫干废;Scrapling 用结构和文本相似度给你关心的元素做指纹,改版后选择器还能活。和上面任何浏览器搭配都行。
- Firecrawl — Web Scraping API for AI Applications — 干净 markdown。当 agent 只要内容(不要页面框架)时,Firecrawl 把 URL 转成 LLM 友好的 markdown,图片 / 链接 / 结构都保留。不需要交互时比开 Playwright 便宜得多。
- Jina Reader — Convert Any URL to LLM-Ready Text — 兜底取页。免费
r.jina.ai/<url>接口,剥掉页面框架 / 广告 / 导航。Firecrawl 限流的时候用、网站轻到不用开浏览器的时候用、或者作为第二信源 sanity check。 - Mem0 — Memory Layer for AI Applications — 持久记忆。Agent 需要记住:访问过哪些站、存了哪些凭证、上周哪个选择器坏了、用户三个会话前说过啥。把这些塞 prompt 又烧 token 又会爆上下文。Mem0 是持久层,把记忆从 prompt 里拿出来。
- Apify MCP Server — 8,000+ Web Scrapers for Agents — 调度。「这站早就有人写过现成的稳定爬虫」的逃生门。把 Apify 的 Actor 库通过 MCP 暴露给你的 agent — 不用半夜两点现写 Twitter 爬虫,agent 直接调一个。Agent 不知道下一刻会撞到哪个站时,这是漏斗顶层。
它们怎么协同(ASCII 流水线)
┌── 用户请求 ──┐
│ "帮我订一张..." │
└──────┬─────────┘
▼
┌─── agent loop ──────────────────────────────┐
│ browser-use skill / Playwright MCP │
│ (LLM ↔ 浏览器 ↔ DOM 动作循环) │
└────────────────┬───────────────────────────┘
▼
┌─── 无头运行时 ──────────────────────────────┐
│ Browserbase(云端、托管隐身) │
│ 或 │
│ Obscura(自托管、数据本地) │
└────────────────┬───────────────────────────┘
▼
┌─── 反爬层 ─────────────────────────────────┐
│ Pydoll(不要 WebDriver 标志 → 干掉简单的 │
│ Cloudflare / DataDome 过滤) │
│ Scrapling(自适应选择器 → 扛得住改版) │
└────────────────┬───────────────────────────┘
▼
┌─── 内容抽取 ────────────────────────────────┐
│ Firecrawl(URL → 干净 markdown) │
│ Jina Reader(免费兜底) │
│ → LLM 友好文本 + 结构化数据 │
└────────────────┬───────────────────────────┘
▼
┌─── 记忆 ────────────────────────────────────┐
│ Mem0(跨会话事实、坏选择器、用户偏好) │
└────────────────┬───────────────────────────┘
▼
┌─── 调度 ────────────────────────────────────┐
│ Apify MCP(8000+ 现成爬虫,不想为每个 │
│ 站自己造轮子时直接用) │
└─────────────────────────────────────────────┘
流水线故意留两个入口:agent 可以自己开浏览器(browser-use + Playwright MCP),也可以委派给 Apify MCP 调一个已经写好的爬虫。真正在生产跑的 agent 两条路都走 — 长尾站偶尔访问就自己开 Chrome,常打的 50 个站直接调 Apify Actor。
你会遇到的取舍
- browser-use vs Playwright MCP — browser-use 是你 import 的 Python 框架;Playwright MCP 是你 agent 通过 JSON-RPC 调的 server。Agent 运行时是你自己控制(你写的 Python 服务)就 import 框架。Agent 是第三方工具(Claude Code / Cursor)改不了源码就用 MCP。
- Browserbase vs Obscura — Browserbase 是无头浏览器界的 AWS:零运维、按分钟计费、隐身全帮你搞定。Obscura 是自托管:机器买了之后单会话成本为 0,但你要运维。按月浏览器小时数选:< ~200 小时 / 月 Browserbase 总拥有成本赢,更高 Obscura 开始划算。
- Pydoll vs Playwright — Playwright 是行业标准,但每家检测厂商都识别它的指纹。Pydoll 直接接 CDP,通用过滤器不好一刀切。代价:Pydoll API 还年轻,没那么好用。不会反扑的站用 Playwright(或 Playwright MCP),被拦截的那部分流量切到 Pydoll。
- Scrapling vs 手写选择器 — 手写 CSS/XPath 写得快但易碎。Scrapling 每次查询多花几毫秒算相似度,但选择器扛得住下次部署。一次性爬手写;跑超过一周一次的活用 Scrapling。
- Firecrawl vs Jina Reader — Firecrawl 收费、批量友好、能渲染 JS。Jina Reader 免费、单 URL、活页面慢时给你缓存快照。原型期先用 Jina,被限流或覆盖不够再切 Firecrawl。
- Mem0 vs 把上下文塞 prompt — 你可以把所有历史塞进 system prompt 然后每轮都为它付 token。Mem0 只检索相关事实(上次坏的选择器、用户偏好的日期格式),每轮约 200 token 而不是 20000。
- Apify MCP vs 自己写 — Apify 的 8000+ Actor 是专门盯一个站的人维护的。Twitter/X、LinkedIn、Amazon、Google Maps 这种,Apify 在稳定性和「下一波反爬升级后仍能用」上完胜。目标是长尾站、或者数据需求太定制装不进任何现成 Actor 时再自己造。
常见踩坑
- Browser-Use 和 Playwright MCP 跑同一个 Chrome profile。两个 agent 共用同一个 user-data-dir 会抢活跃 tab、把 session 状态搞乱。永远用不同的 profile 目录,或者把其中一个迁到 Browserbase / Obscura 会话上。
- 忘了
navigator.webdriver这个标志。标准 Playwright 默认把它设为true。这个布尔值是任何商业 bot 检测器读的第一个东西。要么通过 CDP 改掉、要么用 Pydoll、要么接受任何挂 Cloudflare 的站迟早 403 你。 - 把 Apify Actor 当本地代码用。Apify Actor 在云端跑、按计算单元收费。Agent 在循环里调它没限速账单就上门了。用 Mem0 存一个每日预算,每次调用前 agent 自己检查。
- 把凭证存在 agent prompt 或 Mem0 明文里。用宿主 CLI 的 secret 管理(Claude Code 的
~/.claude/secrets、服务的环境变量),让 agent 按名字读、不读值。Mem0 只记「有这个凭证」,永不记内容。 - 递归抓得太狠。调研 agent 递归点击每页所有链接,一下午把 Firecrawl 配额烧光。深度卡 2、按 URL hash 去重、用 Mem0 跳过上周已访问的 URL。
- 跳过内容抽取直接喂 HTML 给 LLM。又贵又脏。永远过 Firecrawl 或 Jina Reader,LLM 看到的是 markdown 不是导航菜单和跟踪脚本。
10 个资产打包就绪
常见问题
十个工具我都要装吗?能不能先小一点起步?
先装三个:browser-use skill 跑 agent 循环、Playwright MCP 让现有 MCP 客户端能驱动它、Jina Reader 处理内容侧。这是一个晚上就能在笔记本上跑通的网页 agent。再装 Browserbase 或 Obscura 当你超过单机 Chrome 容量。第一次被 Cloudflare 403 时加 Pydoll。第一次半夜选择器坏掉时加 Scrapling。Jina 被限流或需要批量 markdown 时加 Firecrawl。发现自己每个 prompt 都复制粘贴一样的上下文时加 Mem0。Agent 反复撞到一些已有现成爬虫的站时加 Apify MCP。全 10 件套要等 agent 跨周无人值守、对接 ~20 个以上不同站点之后才真划得来。
这个 pack 和 TokRepo 上已有的 Browser Automation pack 有啥区别?
Browser Automation pack 是框架对比 — Browser-Use vs Skyvern vs Stagehand 横评,加一个 Chrome MCP 弹窗补丁。它回答「import 哪个库」。这个 pack 回答下一个问题:要真把 agent 发出去,那个库周围还需要什么 — 无头运行时、反爬对抗、内容抽取、持久记忆、和把活外包给已有爬虫的路。两个 pack 资产零重叠,互补不重复。
Agent 驱动的爬虫会不会让我被告?
完全看目标站和法域。爬公开数据在 hiQ v. LinkedIn 之后在美国一般受保护,但绕过反爬措施、爬登录墙后内容、违反站点 TOS 都开真实责任窗口。安全模式:爬自己的 dashboard、爬 TOS 明确允许自动化的站(多数搜索引擎、多数公开数据门户)、或对那些 Actor 作者已经做过法律分析的站用 Apify Actor。永远不要把反爬层(Pydoll、Browserbase 隐身)用在你没读过 TOS 的站上。
为啥一个浏览器 pack 里放记忆层(Mem0)?
因为有用的浏览器 agent 不是无状态的。跨会话它要记:上周哪个选择器坏了换成了啥替代、哪些站限流过、上次什么时候可以重试、哪些登录流程要 2FA 需要用户确认、用户的收货地址是啥、「我常订的航班」指啥。这些每轮全塞 system prompt 既浪费 token 又扛不住规模化。Mem0 每轮只检索相关事实 — 一般几百 token — 其余存向量库。没有记忆层,每个 agent 每周都要重新发现一遍同样的坏选择器。
同一套 pack 能在 Claude Code / Cursor / Codex CLI 都跑吗?
能。十个 pick 里有六个是 MCP server 或 Python/TypeScript 库,任何 agent 宿主都能调。Playwright MCP、Firecrawl MCP(同一个上游服务)、Apify MCP、Mem0 SDK 都说标准协议。browser-use skill 是 Claude Code skill 格式但底层库是纯 Python — Cursor 和 Codex 通过 AGENTS.md 或 Python tool 定义直接接。Browserbase 和 Obscura 走 HTTP,agent 宿主无关紧要。Pydoll 和 Scrapling 是 Python 库,你 agent 已有的 runtime 里 import 即可。