浏览器自动化 10 款工具实测
你还在用 Selenium、ChromeDriver、Playwright 开发自动化工具 吗?
2026 年,Crawl4AI 62k stars、Browser Use 78k stars、Firecrawl 82k stars——AI 爬虫的 GitHub 热度已经全面碾压传统工具。但热度归热度,到底哪些能用、哪些是噱头?我们把从 PhantomJS 到 bb-browser 这 10 款工具拉到一起,拆原理、看数据、跑代码。
一、四代技术,四种玩法
浏览器自动化采集经历了四个清晰的阶段。每一代解决的核心问题不同:
|
|
|
|
|
|
|---|---|---|---|---|
| 无头浏览器先驱 |
|
|
|
|
| WebDriver 协议 |
|
|
|
|
| CDP 协议 |
|
|
|
|
| AI Agent 驱动 |
|
|
|
|
下面逐代拆解原理。
二、原理拆解:每一代到底怎么控制浏览器?
2.1 PhantomJS(2011-2018†)—— 先驱者的落幕
PhantomJS 内置了一个 QtWebKit 引擎,不依赖真实浏览器,直接在自有内核里渲染页面。这在 2011 年是革命性的——第一次让爬虫能执行 JavaScript。
但它的内核不是 Chromium 也不是 Firefox,很多现代 Web 特性跑不通。2018 年随着 Puppeteer 崛起,项目正式停维。
历史地位:开山鼻祖,但现在任何场景都不该用了。
2.2 Selenium + ChromeDriver —— W3C 标准,但通信是瓶颈
┌─────────┐ HTTP (JSON) ┌────────────┐ 浏览器原生 ┌──────────┐
│ 你的代码 │ ──────────────→ │ ChromeDriver│ ──────────────→│ Chrome │
└─────────┘ 每次操作一次往返 └────────────┘ └──────────┘
Selenium 走 W3C WebDriver 协议——每次操作(点击、输入、截图)都是一次 HTTP 请求-响应。ChromeDriver 作为中间进程,把 HTTP 命令翻译成浏览器原生操作。
优点:W3C 标准,支持所有浏览器(含 IE),多语言 SDK(Java/Python/C#/Ruby/JS/Kotlin)。
致命问题:
- 慢
— HTTP 单向通信,每次操作一次网络往返 - 脆弱
— 选择器绑定 DOM 结构,页面改版就挂 - 易被检测
— navigator.webdriver属性暴露身份
2.3 Puppeteer / Playwright —— WebSocket 双向通信,当前主力
┌─────────┐ WebSocket (CDP) ┌──────────┐
│ 你的代码 │ ◄────────────────→ │ Chrome │
└─────────┘ 双向实时,无中间进程 └──────────┘
Puppeteer(Google, 2017)和 Playwright(Microsoft, 2020)都走 Chrome DevTools Protocol,通过 WebSocket 与浏览器双向实时通信。没有中间进程,直接对话。
性能差距多大? 实测数据:
|
|
|
|
|---|---|---|
|
|
|
~30,000 |
|
|
|
~1.5s |
|
|
|
~0.1s |
|
|
|
~270MB |
数据来源:Octo Browser 评测、社区 benchmark
Playwright 额外优势:跨浏览器(Chromium + Firefox + WebKit)、内置自动等待、Codegen 代码生成器、Trace Viewer 调试。
Playwright 实战代码(code/demo_playwright.py):
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 介入深度,分三种流派:
|
|
|
|
|
|---|---|---|---|
| LLM 提取层 |
|
|
|
| 全自主 Agent |
|
LLM 看截图→决定下一步→执行→循环 |
|
| 混合确定性+AI |
|
|
|
| 身份复用 |
|
直接控制用户真实浏览器
|
|
| 自适应反爬 |
|
|
|
三、10 款工具核心数据对比
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Playwright |
|
|
|
|
|
72k |
| Firecrawl |
|
|
|
|
|
82k |
| Browser Use |
|
|
|
|
|
78k |
| Crawl4AI |
|
|
|
|
|
62k |
| Scrapling |
|
|
|
强 |
|
31k |
|
|
|
|
|
|
|
|
|
|
|
|
|
极强 |
|
|
数据截至 2026.03,来源:GitHub、PkgPulse、Firecrawl Blog
四、AI 爬虫三巨头实战代码
4.1 Crawl4AI —— 一行代码出 Markdown,LLM 直接吃
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 —— 自适应 + 反检测,BeautifulSoup 的 774 倍速
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...
36 个平台、103 个语义命令——不是底层的”点击坐标 (x,y)”,而是高层的”在知乎搜索 AI Agent”。
适用场景:需要登录态的平台数据采集、AI Agent 自动化工作流。
五、反爬能力深度对比
反爬检测的维度和绕过方式:
|
|
|
|
|
|
|---|---|---|---|---|
navigator.webdriver
|
|
|
隐藏 |
|
|
|
|
|
支持 |
|
|
|
|
|
|
支持 |
|
|
|
|
支持 |
|
|
|
|
|
强 | 极强 |
核心洞察:Scrapling 靠”模拟得像”,bb-browser 靠”本来就是”。两者策略不同,但都远超传统方案。
六、成本与可靠性:AI 的代价
AI 不是免费午餐。加了 LLM 之后:
|
|
|
|
|---|---|---|
|
|
$0 |
|
|
|
99%+ |
|
|
|
|
低
|
|
|
|
快
|
最佳实践是 Stagehand 的思路:确定性优先,AI 按需介入。
能用选择器解决的就用选择器($0、99%+);遇到不确定的 UI(弹窗、验证码、动态内容)再调 AI。
浏览器 Agent 市场规模预测:从 2024 年的 $45 亿增长到 2034 年的 $768 亿。
七、选型建议
|
|
|
|
|---|---|---|
| 新项目、通用爬虫 |
|
|
| LLM/RAG 数据管线 |
|
|
| 反爬严格的站点 |
|
|
| 需要登录态 |
|
|
| 全自主 Agent |
|
|
| Playwright 加 AI |
|
|
| 企业级托管服务 |
|
|
| 遗留系统 / IE |
|
|
八、彩蛋:爬虫终将消亡?
一个有意思的趋势:WebMCP 让网站主动暴露结构化 API 给 AI Agent,Cloudflare 的 Markdown for Agents 让网页内容对 AI 直接可读。
如果未来网站都”Agent 就绪”了——主动提供工具接口和结构化内容——那还需要爬虫吗?
也许”爬虫”这个概念会分化成两条线:
- 合规调用
:通过 WebMCP/MCP 标准接口获取数据,不需要模拟浏览器 - 对抗采集
:针对不开放接口的站点,反爬 vs 反反爬的军备竞赛继续
无论走哪条线,理解浏览器自动化的底层原理(WebDriver / CDP / Extension API)都是基本功。工具会变,协议不会轻易变。
数据与来源说明
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
数据整理自公开报告、官方文档与主流媒体报道,仅供讨论与参考;具体口径与时间以各机构最新发布为准。
夜雨聆风