2026年浏览器自动化工具怎么选?从Selenium到AI驱动全解析
你还在用Selenium、ChromeDriver、Playwright做爬虫吗?
2026年的数据出来了。Crawl4AI有62k星,Browser Use有78k星,Firecrawl有82k星。AI爬虫在GitHub上的热度已经全面超过了传统工具。
但热度归热度,哪些真正能用,哪些只是噱头?本文把从PhantomJS到bb-browser的10款工具放在一起,拆原理、看数据、跑代码,帮你选出合适的方案。
一、四代技术,四种玩法
浏览器自动化采集经历了四个阶段,每一代解决的核心问题都不一样。
| 阶段 | 时期 | 核心协议 | 代表工具 | 解决什么问题 |
|---|---|---|---|---|
| 无头浏览器先驱 | 2011-2017 | 自有引擎 | PhantomJS | 第一次能渲染JS |
| WebDriver协议 | 2004-至今 | W3C WebDriver (HTTP) | Selenium + ChromeDriver | 标准化多浏览器控制 |
| CDP协议 | 2017-至今 | DevTools Protocol (WebSocket) | Puppeteer / Playwright | 高性能双向实时控制 |
| AI Agent驱动 | 2024-至今 | CDP + LLM / MCP | Crawl4AI / Browser Use / Scrapling / bb-browser | 自然语言驱动 + 自适应 |
下面逐代拆解原理。
二、每一代是怎么控制浏览器的
2.1 PhantomJS(2011-2018):先驱者的落幕
PhantomJS内置了QtWebKit引擎,不依赖真实浏览器,直接在自有内核里渲染页面。这在2011年是革命性的,爬虫第一次能执行JavaScript。
但它的内核不是Chromium也不是Firefox,很多现代网页特性跑不通。2018年随着Puppeteer崛起,项目正式停止维护。
历史地位:开山鼻祖。但现在任何场景都不该用它了。
2.2 Selenium + ChromeDriver:W3C标准,但通信是瓶颈
Selenium走W3C WebDriver协议。每次操作(点击、输入、截图)都是一次HTTP请求和响应。ChromeDriver作为中间进程,把HTTP命令翻译成浏览器原生操作。
优点:W3C标准,支持所有浏览器(包括IE),有多语言SDK(Java、Python、C#、Ruby、JS、Kotlin)。
缺点也很明显:
慢:HTTP单向通信,每次操作都要走网络往返
脆弱:选择器绑定DOM结构,页面一改就挂
容易被检测:navigator.webdriver属性会暴露身份
2.3 Puppeteer和Playwright:WebSocket双向通信,当前主力
Puppeteer(Google,2017)和Playwright(Microsoft,2020)都走Chrome DevTools Protocol,通过WebSocket与浏览器双向实时通信。没有中间进程,直接对话。
性能差距有多大?实测数据:
| 维度 | Selenium | Playwright |
|---|---|---|
| 24小时处理URL数 | 约8000 | 约30000 |
| 页面导航耗时 | 约2.0秒 | 约1.5秒 |
| 元素点击耗时 | 约0.5秒 | 约0.1秒 |
| 并行内存占用 | 约2000MB | 约270MB |
Playwright还有额外优势:跨浏览器(Chromium、Firefox、WebKit)、内置自动等待、Codegen代码生成器、Trace Viewer调试工具。
下面是一段Playwright的实战代码:
async def scrape_hn_titles():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True)
page = await browser.new_page()
await page.goto("https://news.ycombinator.com", wait_until="domcontentloaded")
titles = await page.eval_on_selector_all(
".titleline > a",
"elements => elements.map(e => ({title: e.textContent, url: e.href}))",
)
await browser.close()
return titles代码简洁、速度快、稳定。但它不懂页面在说什么,你必须手写选择器,页面一改就得跟着改。
2.4 AI Agent时代:让LLM理解页面
第四代工具的核心变化是:不再手写选择器,让LLM理解页面语义。
根据AI介入的深度,可以分为几种流派:
| 流派 | 代表 | 原理 | AI介入度 |
|---|---|---|---|
| LLM提取层 | Crawl4AI / Firecrawl | 页面渲染用Playwright,LLM负责结构化提取 | 只在提取环节 |
| 全自主Agent | Browser Use / OpenClaw | LLM看截图→决定下一步→执行→循环 | 全流程 |
| 混合确定性+AI | Stagehand | Playwright写主流程,AI处理不确定部分 | 选择性 |
| 身份复用 | bb-browser | 控制用户真实浏览器,复用登录态 | 工具层 |
| 自适应反爬 | Scrapling | 网站结构变时自动重新定位 | 选择器自适应 |
三、10款工具核心数据对比
| 工具 | 时代 | 协议 | 语言 | 反爬能力 | AI集成 | GitHub Stars |
|---|---|---|---|---|---|---|
| PhantomJS | 先驱 | 自有引擎 | JS | 无 | 无 | 30k (已归档) |
| Selenium | WebDriver | HTTP | 多语言 | 弱 | 无 | 32k |
| Puppeteer | CDP | WebSocket | Node.js | 中 | 可集成 | 89k |
| Playwright | CDP | WebSocket | 多语言 | 中 | Stagehand | 72k |
| Firecrawl | AI Agent | 云端+LLM | API | 强 | 核心 | 82k |
| Browser Use | AI Agent | CDP+LLM | Python | 中 | 核心 | 78k |
| Crawl4AI | AI Agent | CDP+LLM | Python | 中 | 核心 | 62k |
| Scrapling | AI Agent | HTTP/CDP | Python | 强 | 自适应 | 31k |
| Stagehand | AI Agent | Playwright+AI | TS | 中 | 混合 | 21k |
| bb-browser | AI Agent | Extension/MCP | TS | 极强 | MCP | 1.4k |
数据截至2026年3月。
四、三款主流AI爬虫实战
4.1 Crawl4AI:一行代码出Markdown
Crawl4AI的核心卖点是:网页转成LLM友好的Markdown和结构化JSON,可以直接对接RAG流程。
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, CacheMode
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(
url="https://news.ycombinator.com",
config=CrawlerRunConfig(cache_mode=CacheMode.BYPASS),
)
print(result.markdown.raw_markdown[:500]) # 干净的Markdown
print(len(result.links["internal"])) # 自动提取链接它还支持CSS和LLM双模式的结构化提取:
schema = {
"name": "HN Posts",
"baseSelector": ".athing",
"fields": [
{"name": "title", "selector": ".titleline > a", "type": "text"},
{"name": "url", "selector": ".titleline > a", "type": "attribute", "attribute": "href"},
],
}4.2 Scrapling:自适应加反检测
Scrapling提供三种Fetcher,按场景选:
from scrapling import Fetcher, StealthyFetcher, PlayWrightFetcher
# 基础请求,类似requests,速度快
page = Fetcher(auto_match=True).get("https://news.ycombinator.com")
# 隐身模式,能绕Cloudflare Turnstile
page = StealthyFetcher(auto_match=True).fetch("https://example.com")
# 完整浏览器渲染,处理JS动态内容
page = PlayWrightFetcher(auto_match=True).fetch("https://example.com", headless=True)auto_match=True是它的杀手锏。网站DOM结构变了,Scrapling会自动重新定位元素,你不用改代码。传统爬虫遇到这种情况直接就挂了。
反检测方面,StealthyFetcher完整模拟了浏览器的TLS指纹、Cookie处理、Header排序、请求节奏,Cloudflare看不出区别。
4.3 bb-browser:你的浏览器就是API
bb-browser的思路完全不同:不模拟浏览器,直接用你正在用的浏览器。
它通过Chrome扩展连接你已经登录的Chrome实例。对网站来说,操作者就是你本人,Cookie、Session、指纹全是真实的。
# CLI模式,一行命令搜索知乎
bb search zhihu "AI Agent"
# MCP模式,让Claude或Cursor调用它覆盖了36个平台、103个语义命令,包括Twitter、知乎、B站、GitHub、ArXiv。不是底层的"点击坐标(x,y)",而是高层的"在知乎搜索AI Agent"。
适用场景:需要登录态的平台数据采集,以及AI Agent自动化工作流。
五、反爬能力对比
| 检测维度 | Selenium | Playwright | Scrapling | bb-browser |
|---|---|---|---|---|
| navigator.webdriver属性 | 暴露 | 暴露 | 隐藏 | 不适用(真浏览器) |
| TLS指纹匹配 | 不支持 | 不支持 | 支持 | 不适用 |
| 真实登录态复用 | 不支持 | 不支持 | 不支持 | 支持 |
| 自适应选择器 | 不支持 | 不支持 | 支持 | 不支持 |
| 整体反爬等级 | 弱 | 中 | 强 | 极强 |
核心洞察:Scrapling靠"模拟得像",bb-browser靠"本来就是"。两者策略不同,但都比传统方案强很多。
六、成本与可靠性
加了LLM之后,成本会明显上升:
| 维度 | 传统选择器 (Playwright) | AI驱动 (Browser Use等) |
|---|---|---|
| 单次操作成本 | 0元 | 0.003到0.01美元 |
| 操作可靠性 | 99%以上 | 85%到95% |
| 选择器维护成本 | 高,页面改就挂 | 低,AI自适应 |
| 新页面适配速度 | 慢,要手写选择器 | 快,自然语言描述 |
比较好的实践是Stagehand的思路:确定性优先,AI按需介入。能用选择器解决的就用选择器(成本0元,可靠性99%以上),遇到不确定的UI(弹窗、验证码、动态内容)再调AI。
七、选型建议
| 你的场景 | 推荐工具 | 理由 |
|---|---|---|
| 新项目、通用爬虫 | Playwright | 性能好,跨浏览器,生态成熟 |
| LLM或RAG数据管线 | Crawl4AI | 自动输出Markdown,原生支持LLM提取 |
| 反爬严格的站点 | Scrapling | TLS指纹仿真,自适应选择器 |
| 需要登录态 | bb-browser | 复用真实浏览器,36个平台的语义命令 |
| 全自主Agent | Browser Use | 截图→推理→执行循环 |
| Playwright加AI辅助 | Stagehand | 确定性优先,AI选择性介入 |
| 企业级托管服务 | Firecrawl | 云端浏览器,Claude官方插件 |
| 遗留系统或IE | Selenium | 唯一还支持IE的方案 |
八、选型核心原则
选工具主要看三点:你的目标网站反爬严不严、你需要不需要登录态、你想要全自动还是可控性强。
反爬严的站,选Scrapling或bb-browser。需要登录态的,bb-browser最省事。想要全自动AI Agent,Browser Use或Crawl4AI都可以。想要稳定可控,Playwright加Stagehand的思路最靠谱。
没有万能的工具,只有适合你场景的方案。先搞清楚自己要什么,再从上面选一个,跑个小例子试试看。
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!