无头浏览器全面对比研究(实测校验版)
研究日期: 2026-05-22 系统环境: Ubuntu 22.04 (Linux 6.8.0), x86_64 实测版本: Playwright Python 1.52.0 (Chromium 136.0.7103.25), Puppeteer 23.11.1, Chrome 134.0.6998.165 校验方法: 多 Agent 并行实测 + 交叉验证
一、五大 Skill 详细介绍
本机共有 5 种无头浏览器 Skill 可用,按能力层级从低到高排列:
Skill 1: Chrome Headless CLI
定位: 零代码、一行命令的页面渲染工具
核心能力:
--dump-dom: 输出渲染后的完整 DOM HTML 到 stdout--screenshot: 页面截图 (PNG)--print-to-pdf: 页面导出 PDF--virtual-time-budget: 快进异步 JS (setTimeout/setInterval 立即执行)--remote-debugging-port: 暴露 CDP 协议供其他工具连接
架构: 完整 Chrome 浏览器无窗口运行,每次调用启动新进程,无状态复用。Chrome 134 中旧 headless (--headless=old) 已完全移除。
独特优势:
navigator.webdriver = false— 天然不被反爬检测(因为不经过 CDP 自动化协议)- 零依赖,系统已安装即可用
- 无需编写代码
关键限制 (实测确认):
- 无交互能力(不能点击、填写、导航)
- 单次只能处理一个 URL
--disable-javascript在 Chrome 134 新 headless 中完全失效data:URL 中含<script>时--dump-dom可能无输出(需用file://)- 无法获取 JS 执行结果、网络响应、Cookie 等
实测性能:
| 指标 | 数值 |
|---|---|
| 启动+渲染+输出 | ~551ms (5次平均) |
| 内存占用 | ~1054 MB / 14 进程 |
| 截图 (1280x720) | ~502ms |
| PDF 生成 | ~556ms |
典型用法:
# DOM 导出 (含异步 JS 等待)
google-chrome --headless --dump-dom --virtual-time-budget=5000 --timeout=10000 URL
# 截图
google-chrome --headless --screenshot=/tmp/page.png --window-size=1920,1080 URL
# PDF
google-chrome --headless --print-to-pdf=/tmp/page.pdf --no-pdf-header-footer URL
# Docker/CI 环境
google-chrome --headless --no-sandbox --disable-gpu --disable-dev-shm-usage \
--screenshot=/tmp/page.png URLSkill 2: Puppeteer (Node.js)
定位: Node.js 生态的 Chrome 自动化库,生态最丰富
核心能力:
- 完整页面交互 (导航、点击、填写、选择、拖拽)
- 请求拦截与修改 (
setRequestInterception) - JS/CSS 代码覆盖率分析 (
page.coverage) - 无障碍树快照 (
page.accessibility.snapshot()) - Chrome DevTools Trace 录制 (
page.tracing) - 设备/地理/时区/网络模拟
- Cookie 和 localStorage 管理
- PDF 生成 (全选项)、截图 (页面/元素级)
架构: 直接通过 WebSocket/Pipe 与 Chrome 进程通信(CDP 协议),无中间服务进程,延迟最低。
选择器系统:
- CSS:
page.$('div.class') - XPath:
::-p-xpath(//div) - Text:
::-p-text(Submit) - ARIA:
::-p-aria([name="Click"][role="button"]) - Shadow DOM:
>>>(深穿透) - 自定义:
registerCustomQueryHandler()
Headless 模式 (Chrome 134):
| 模式 | 配置 | 说明 |
|---|---|---|
| 新 Headless | headless: true | 默认,完整 Chrome 无窗口 |
| Headless Shell | headless: 'shell' | 轻量二进制,性能最优 |
| Headful | headless: false | 有窗口,调试用 |
注: Chrome 134 下
headless:true和headless:'shell'的 UA 完全相同。
反检测生态 (核心优势):
puppeteer-extra-plugin-stealth: 修补 16+ 检测特征(webdriver、plugins、WebGL、UA 等)puppeteer-extra-plugin-recaptcha: 自动解验证码puppeteer-extra-plugin-adblocker: 广告拦截puppeteer-cluster: 并行实例管理
实测性能:
| 指标 | 数值 |
|---|---|
| 完整周期 (launch→page→goto→close) | ~196ms |
| 内存占用 | 与 Chrome 相同 (~1054 MB) |
典型用法:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: true,
executablePath: '/usr/bin/google-chrome',
args: ['--no-sandbox', '--disable-dev-shm-usage']
});
const page = await browser.newPage();
await page.goto('https://example.com');
// 截图
await page.screenshot({path: '/tmp/page.png', fullPage: true});
// 请求拦截
await page.setRequestInterception(true);
page.on('request', req => {
if (req.resourceType() === 'image') req.abort();
else req.continue();
});
// JS 执行
const title = await page.evaluate(() => document.title);
await browser.close();
})();Skill 3: Playwright (Python)
定位: 全能型浏览器自动化框架,多浏览器 + 多语言支持
核心能力:
- 完整交互 (点击、填写、拖拽、上传、下载)
- 自动等待 (actionability: visible + stable + enabled + receives events)
- 网络拦截与 mock (
page.route()) - HAR 录制/回放 (内置)
- Trace 录制与可视化回放 (DOM 快照 + 截图 + 网络)
- 视频录制 (内置 FFmpeg)
- PDF / 截图 / 无障碍树
- WebSocket 路由
- Clock API (时间控制)
- 断言自动重试 (
expect(locator).to_have_text())
架构:
Python (sync/async API)
↓ JSON-over-pipe (4字节小端长度前缀)
Node.js Driver (内嵌于 pip 包, 127 MB)
↓ CDP / 自有协议
Browser (Chromium / Firefox / WebKit)
选择器系统 (最丰富):
get_by_role("button", name="Submit")— ARIA 角色 (80+ roles)get_by_text("Submit")— 文本get_by_label("Username")— Label 关联get_by_placeholder("Enter email")— Placeholderget_by_test_id("submit-btn")— 可配置测试 ID.filter(has_text=, has=, visible=)— 链式过滤.and_()/.or_()— 布尔组合- Shadow DOM 默认穿透
浏览器支持:
| 浏览器 | 引擎 | 实测版本 |
|---|---|---|
| Chromium | Blink | 136.0.7103.25 |
| Firefox | Gecko | 需安装 |
| WebKit | WebKit | 需安装 |
| 系统 Chrome | Blink | 134 (via channel='chrome') |
Context 隔离 (实测确认):
- 每个 BrowserContext = 独立无痕会话
- Cookie、localStorage、IndexedDB 完全隔离
storage_state可保存/恢复登录状态
⚠️ 内置 Chromium vs 系统 Chrome 检测差异 (实测发现):
| 特征 | 内置 Chromium | channel='chrome' (系统 Chrome) |
|---|---|---|
window.chrome | false ❌ | true ✅ |
navigator.plugins | 0 ❌ | 5 ✅ |
navigator.webdriver | true | true |
| WebGL vendor | ”WebKit” ❌ | 正常 ✅ |
connection.rtt | 0 ❌ | 100 ✅ |
deviceMemory | None ❌ | 有值 ✅ |
重要: 如需反爬,务必使用
channel='chrome'+--disable-blink-features=AutomationControlled
实测性能:
| 指标 | 数值 |
|---|---|
| 完整周期 (playwright→launch→page→goto→close) | ~346ms |
| Context 创建 | ~10-50ms |
| 包体积 (Python) | 131 MB |
| 浏览器二进制 | 618 MB (Chromium full + headless shell) |
典型用法:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
# 使用系统 Chrome (反检测更好)
browser = p.chromium.launch(
headless=True,
channel='chrome',
args=['--disable-blink-features=AutomationControlled']
)
context = browser.new_context(
viewport={'width': 1920, 'height': 1080},
user_agent='Mozilla/5.0 ...' # 自定义 UA
)
page = context.new_page()
# 网络拦截
page.route("**/*.{png,jpg}", lambda route: route.abort())
# 导航 + 交互
page.goto("https://example.com")
page.get_by_role("button", name="Accept").click()
page.get_by_label("Email").fill("user@example.com")
# 截图 + PDF
page.screenshot(path="/tmp/page.png", full_page=True)
page.pdf(path="/tmp/page.pdf")
# 无障碍树
snapshot = page.locator("main").aria_snapshot()
browser.close()Skill 4: Playwright MCP Server
定位: AI Agent 专用的浏览器自动化接口,通过 MCP 协议暴露结构化工具
版本: @playwright/mcp@0.0.70 (Microsoft 官方维护)
核心设计: 使用无障碍树快照 (Accessibility Snapshot) 而非截图,LLM 读取结构化文本并通过 ref ID 精确引用元素,无需视觉模型。
工具数量 (实测验证):
| 配置 | 工具数 |
|---|---|
| 默认 (无 —caps) | 21 tools |
--caps=vision,pdf,devtools | 34 tools |
--caps=vision,pdf,devtools,storage,network,testing,config | 61 tools |
| 源码中总定义 (含 hidden) | 70 tools |
工具分组详情:
始终启用 (21 tools):
| 组 | 工具 |
|---|---|
| core (16) | browser_close, browser_resize, browser_console_messages, browser_handle_dialog, browser_evaluate, browser_file_upload, browser_fill_form, browser_network_requests, browser_run_code, browser_take_screenshot, browser_snapshot, browser_click, browser_drag, browser_hover, browser_select_option, browser_wait_for |
| core-input (2) | browser_press_key, browser_type |
| core-navigation (2) | browser_navigate, browser_navigate_back |
| core-tabs (1) | browser_tabs |
可选启用:
| 组 | 工具数 | 核心工具 |
|---|---|---|
| vision | 6 | mouse_click_xy, mouse_drag_xy, mouse_move_xy, mouse_down/up, mouse_wheel |
| 1 | browser_pdf_save | |
| devtools | 6 | start/stop_tracing, start/stop_video, video_chapter, resume |
| storage | 17 | cookie/localstorage/sessionstorage 各 5 个 CRUD + storage_state 2个 |
| network | 4 | network_state_set, route, route_list, unroute |
| testing | 5 | generate_locator, verify_element/text/list/value_visible |
| config | 1 | browser_get_config |
配置方式:
- CLI: 40+ 参数 (
--browser,--headless,--caps,--viewport-size,--device等) - JSON 配置文件
- 环境变量 (
PLAYWRIGHT_MCP_*)
安全特性:
- 域名白名单/黑名单 (
--allowed-origins,--blocked-origins) - 文件访问限制
- Secrets 掩码
典型启动:
# AI Agent 基础模式
npx @playwright/mcp --browser chrome --headless
# 全功能模式
npx @playwright/mcp --browser chrome --headless \
--caps vision,pdf,devtools,storage,network,testing,config
# 指定设备和视口
npx @playwright/mcp --browser chrome --headless \
--device "iPhone 15 Pro" --caps vision,storageSkill 5: Puppeteer MCP Server
定位: 轻量级浏览器 MCP 接口,功能精简
版本: @modelcontextprotocol/server-puppeteer@2025.5.12 (社区参考实现)
工具列表 (仅 7 个):
| 工具 | 功能 | 参数 |
|---|---|---|
puppeteer_navigate | 导航 | url |
puppeteer_screenshot | 截图 | name, selector?, width?, height? |
puppeteer_click | 点击 | selector |
puppeteer_fill | 填写 | selector, value |
puppeteer_select | 下拉选择 | selector, value |
puppeteer_hover | 悬停 | selector |
puppeteer_evaluate | 执行 JS | script |
Resources:
console://logs— 浏览器控制台日志screenshot://{name}— 命名截图
交互模式: 截图 + CSS 选择器(需要视觉模型配合)
默认行为: 非 Docker 环境默认 headful (有窗口);Docker 自动切 headless
安全机制: 危险参数 (如 --no-sandbox) 需要 allowDangerous: true
局限: 不支持网络拦截、Cookie 管理、Tab 管理、文件上传、视频录制、PDF、测试断言。高级功能只能通过 puppeteer_evaluate 执行 JS 间接实现。
二、核心对比表
2.1 功能维度
| 能力 | Chrome CLI | Puppeteer | Playwright | Playwright MCP | Puppeteer MCP |
|---|---|---|---|---|---|
| 页面导航 | ✅ (单次) | ✅ | ✅ | ✅ | ✅ |
| 点击/填写 | ❌ | ✅ | ✅ | ✅ | ✅ |
| 网络拦截 | ❌ | ✅ | ✅ | ✅ (opt-in) | ❌ |
| Cookie 管理 | ❌ | ✅ | ✅ | ✅ (opt-in) | ❌ |
| 截图 | ✅ | ✅ | ✅ | ✅ | ✅ |
| ✅ | ✅ | ✅ | ✅ (opt-in) | ❌ | |
| 视频录制 | ❌ | ❌ | ✅ | ✅ (opt-in) | ❌ |
| DOM 导出 | ✅ | ✅ | ✅ | ✅ | ✅ (via evaluate) |
| 无障碍树 | ❌ | ✅ | ✅ | ✅ (核心) | ❌ |
| 代码覆盖率 | ❌ | ✅ | ❌ | ❌ | ❌ |
| Trace 录制 | ❌ | ✅ (Chrome) | ✅ (全功能) | ✅ (opt-in) | ❌ |
| HAR 录制 | ❌ | ❌ | ✅ | ❌ | ❌ |
| 多浏览器 | ❌ | ❌ (仅 Chromium+Firefox) | ✅ (3种) | ✅ (3种) | ❌ |
| 设备模拟 | ✅ (仅视口) | ✅ | ✅ (133种) | ✅ | ❌ |
| 文件上传 | ❌ | ✅ | ✅ | ✅ | ❌ |
| Tab 管理 | ❌ | ✅ | ✅ | ✅ | ❌ |
| 测试断言 | ❌ | ❌ | ✅ (自动重试) | ✅ (opt-in) | ❌ |
| 代码生成 | ❌ | ❌ | ✅ (7种语言) | ✅ | ❌ |
2.2 性能维度 (实测数据)
| 指标 | Chrome CLI | Puppeteer | Playwright |
|---|---|---|---|
| 启动→输出完整周期 | 551ms | 196ms | 346ms |
| 内存 (单页) | ~1054 MB | ~1054 MB | ~1054 MB |
| 进程数 | 14 | 14 | 14 + Node.js driver |
| 包体积 | 0 (已安装) | ~5 MB + Chrome | 131 MB + 618 MB |
注: Puppeteer 最快是因为直接 pipe 连接,无中间进程;Playwright 有 Node.js driver 层;Chrome CLI 含完整渲染+序列化开销。
2.3 反检测维度 (实测数据)
| 特征 | Chrome CLI | Puppeteer | Playwright (内置) | Playwright (channel=chrome) |
|---|---|---|---|---|
navigator.webdriver | false ✅ | true ❌ | true ❌ | true ❌ |
window.chrome | true ✅ | true ✅ | false ❌ | true ✅ |
plugins.length | 5 ✅ | 5 ✅ | 0 ❌ | 5 ✅ |
| UA 含 HeadlessChrome | 是 ⚠️ | 是 ⚠️ | 是 ⚠️ | 是 ⚠️ |
| WebGL vendor | 正常 ✅ | 正常 ✅ | “WebKit” ❌ | 正常 ✅ |
connection.rtt | 100 ✅ | 100 ✅ | 0 ❌ | 100 ✅ |
deviceMemory | 有值 ✅ | 有值 ✅ | None ❌ | 有值 ✅ |
反检测难度排序 (从最易检测到最难):
- 🔴 Playwright 内置 Chromium 默认 — 6+ 异常特征
- 🟡 Puppeteer 默认 — webdriver=true + HeadlessChrome UA
- 🟢 Chrome CLI — 仅 UA 含 HeadlessChrome
- 🟢 Puppeteer + stealth 插件 — 全面修补
- 🟢 Playwright
channel='chrome'+--disable-blink-features=AutomationControlled— 接近完美
轻量修复方案:
# Playwright: 添加此参数即可 webdriver=false
browser = p.chromium.launch(
channel='chrome',
args=['--disable-blink-features=AutomationControlled']
)// Puppeteer: 添加此参数即可 webdriver=false
const browser = await puppeteer.launch({
args: ['--disable-blink-features=AutomationControlled']
});2.4 MCP Server 对比
| 维度 | Playwright MCP | Puppeteer MCP |
|---|---|---|
| 工具总数 | 21-61 (按配置) | 7 |
| 交互模式 | 无障碍树 (结构化) | 截图 + CSS 选择器 |
| 浏览器支持 | Chrome/Firefox/WebKit | 仅 Chrome |
| 网络 Mock | ✅ | ❌ |
| 存储管理 | ✅ (17 tools) | ❌ |
| 视频/Trace | ✅ | ❌ |
| ✅ | ❌ | |
| 测试断言 | ✅ | ❌ |
| Tab 管理 | ✅ | ❌ |
| 代码生成 | ✅ | ❌ |
| 视觉坐标操作 | ✅ | ❌ |
| 配置丰富度 | 40+ 选项 | 仅 launch options |
| 维护方 | Microsoft (官方) | 社区参考实现 |
三、推荐方案
3.1 场景→Skill 推荐
| 使用场景 | 推荐 Skill | 理由 |
|---|---|---|
| 简单截图/PDF/DOM 提取 | Chrome CLI | 零代码最快,启动即用 |
| AI Agent 浏览网页 | Playwright MCP | 21-61 tools,无障碍树模式最适合 LLM |
| Python 项目自动化 | Playwright Python | sync API 简洁,功能最全,与项目 venv 统一 |
| Node.js 项目自动化 | Puppeteer | 延迟最低 (196ms),生态丰富 |
| 反爬/绕过检测 | Puppeteer + stealth | 16+ evasion 模块,最成熟 |
| 跨浏览器兼容测试 | Playwright Python | 唯一支持 Chromium + Firefox + WebKit |
| E2E 测试框架 | Playwright Python + pytest | 自动重试断言 + Trace + 并行 |
| 轻量级 AI 浏览 | Puppeteer MCP | 仅 7 tools,简单场景足够 |
| CI/CD 视觉回归 | Chrome CLI + diff | 最轻量,无依赖 |
3.2 综合推荐
┌─────────────────────────────────────────────────────────────┐
│ 首选: Playwright Python + Playwright MCP │
│ - Python 脚本用 Playwright Python (sync API) │
│ - AI Agent 集成用 Playwright MCP │
│ - 两者共享同一浏览器引擎和配置体系 │
├─────────────────────────────────────────────────────────────┤
│ 补充: Puppeteer (反检测场景) │
│ - stealth 插件成熟度远超 playwright-stealth │
│ - Node.js 生态集成最紧密 │
├─────────────────────────────────────────────────────────────┤
│ 兜底: Chrome CLI (零依赖简单任务) │
│ - 脚本中一行命令搞定截图/PDF │
│ - 天然 webdriver=false │
└─────────────────────────────────────────────────────────────┘
四、每个 Skill 能做什么(能力矩阵)
4.1 Chrome Headless CLI
| 能做 | 不能做 |
|---|---|
| ✅ 渲染页面取 DOM | ❌ 点击按钮 |
| ✅ 截图 (可设窗口大小) | ❌ 填写表单 |
| ✅ 生成 PDF | ❌ 多步导航 |
| ✅ 快进异步 JS | ❌ 读取 JS 变量值 |
| ✅ 设置代理 | ❌ 拦截/修改请求 |
| ✅ 覆写 User-Agent | ❌ 管理 Cookie |
| ✅ 暴露 CDP 给其他工具 | ❌ 等待特定元素 |
| ✅ 无头截图+隐藏滚动条 | ❌ 禁用 JavaScript (已失效!) |
4.2 Puppeteer
| 能做 | 不能做 |
|---|---|
| ✅ 完整页面交互 | ❌ Safari/WebKit 测试 |
| ✅ 请求拦截/mock | ❌ 内置视频录制 |
| ✅ JS/CSS 覆盖率分析 | ❌ HAR 录制 |
| ✅ Chrome DevTools Trace | ❌ 内置测试框架 |
| ✅ 反检测 (stealth 插件) | ❌ 断言自动重试 |
| ✅ 无障碍树 | ❌ 代码录制/生成 |
| ✅ PDF (全选项) | ❌ 多浏览器并行 |
| ✅ 设备/地理/时区模拟 | ❌ WebSocket 路由 |
| ✅ 远程浏览器连接 |
4.3 Playwright Python
| 能做 | 不能做 |
|---|---|
| ✅ 所有 Puppeteer 能做的 | ❌ JS/CSS 覆盖率 (需 CDP session) |
| ✅ 多浏览器 (Chromium/Firefox/WebKit) | ❌ 原生 stealth (需第三方) |
| ✅ 内置视频录制 | ❌ 浏览器扩展 (Firefox/WebKit) |
| ✅ HAR 录制/回放 | |
| ✅ Trace 录制+可视化 | |
| ✅ 代码录制 (codegen, 7种语言) | |
| ✅ WebSocket 路由 | |
| ✅ 断言自动重试 | |
| ✅ Clock API 时间控制 | |
| ✅ Context 完全隔离 | |
| ✅ 存储状态保存/恢复 |
4.4 Playwright MCP
| 能做 | 不能做 |
|---|---|
| ✅ AI Agent 结构化浏览 | ❌ 覆盖率分析 |
| ✅ 无障碍树驱动交互 | ❌ HAR 录制 |
| ✅ 网络 mock (opt-in) | ❌ 自定义复杂等待条件 |
| ✅ Cookie/Storage 管理 | ❌ 多 Context 并行 |
| ✅ 视频/Trace (opt-in) | ❌ Promise.all 并行操作 |
| ✅ PDF (opt-in) | ❌ 组件测试 |
| ✅ 坐标级鼠标控制 | ❌ iframe 深度操作 |
| ✅ 测试断言 (opt-in) | |
| ✅ 代码生成 (TypeScript) | |
| ✅ 安全域名控制 |
4.5 Puppeteer MCP
| 能做 | 不能做 |
|---|---|
| ✅ 基础导航 | ❌ 网络拦截 |
| ✅ 截图 (页面/元素) | ❌ Cookie 管理 |
| ✅ 点击/悬停 | ❌ Tab 管理 |
| ✅ 填写/选择 | ❌ 文件上传 |
| ✅ 执行任意 JS | |
| ✅ 控制台日志收集 | ❌ 视频/Trace |
| ❌ 测试断言 | |
| ❌ 多浏览器 |
五、生态系统
5.1 Playwright 生态
| 工具 | 用途 | 状态 |
|---|---|---|
pytest-playwright | Python 测试框架集成 | 官方 |
playwright codegen | 交互录制→代码 | 内置 |
playwright show-trace | Trace 可视化 | 内置 |
@playwright/mcp | AI Agent MCP | 官方 |
playwright-stealth (PyPI) | Python 反检测 | 第三方 v2.0.3 |
playwright-extra (npm) | Node.js 插件框架 | 第三方 v4.3.6 |
| trace.playwright.dev | 在线 Trace 查看器 | 官方 |
5.2 Puppeteer 生态
| 工具 | 用途 | 状态 |
|---|---|---|
puppeteer-extra | 插件框架 | 活跃 |
puppeteer-extra-plugin-stealth | 反检测 (16+ evasions) | 最成熟 |
puppeteer-extra-plugin-recaptcha | 验证码解决 | 活跃 |
puppeteer-cluster | 并行实例管理 | 活跃 |
puppeteer-screen-recorder | 视频录制 | 第三方 |
puppeteer-to-istanbul | 覆盖率转换 | 活跃 |
browserless | Chrome as a Service | 商业 |
5.3 Chrome CLI 生态
无独立生态。作为 Puppeteer/Playwright 的底层运行时,或通过 --remote-debugging-port 暴露 CDP 协议。
六、本机安装状态
| 组件 | 版本 | 路径 |
|---|---|---|
| Google Chrome | 134.0.6998.165 | /usr/bin/google-chrome |
| Playwright (Python, venv) | 1.52.0 | .venv/lib/python3.10/site-packages/playwright/ |
| Playwright (Python, system) | 1.58.0 | /home/zbc/.local/bin/playwright |
| Playwright Chromium | 136.0.7103.25 | ~/.cache/ms-playwright/chromium-1169/ |
| Playwright MCP | 0.0.70 | $(npm root -g)/@playwright/mcp/ |
| Puppeteer | 23.11.1 | MCP Server 内置依赖 |
| Puppeteer MCP | 2025.5.12 | $(npm root -g)/@modelcontextprotocol/server-puppeteer/ |
| Node.js | 22.12.0 | /home/zbc/local/nodejs/bin/node |
七、附录:实测验证方法
本文档所有数据经过以下验证流程:
- 多 Agent 并行研究: 4 个 Agent 分别研究各工具的文档和源码
- 实测验证: 5 个 Agent 在本机实际执行测试脚本
- 交叉对比: 对比各 Agent 结果,发现并修正 10+ 处原始数据错误
- 反检测深度测试: 通过
evaluate()在页面内检测 7+ 自动化特征
已修正的错误
| 原始声称 | 修正值 | 原因 |
|---|---|---|
| Playwright 1.58 | venv 中为 1.52.0 | system pip 和 venv 版本不同 |
| 143 种设备 | 133 种 | v1.52 设备数 |
| Playwright 启动 500-1000ms | ~346ms | 实测更快 |
| Puppeteer 启动 1-3s | ~196ms | 严重高估 |
| Chrome CLI 启动 210-300ms | ~551ms | 含完整渲染序列化开销 |
| 内存 925 MB | ~1054 MB | 实测 14 进程 |
| Playwright MCP 45+ tools | 默认 21, 最大 61 | 取决于 —caps 配置 |
| Playwright window.chrome=true | 内置 Chromium 为 false | 需 channel=‘chrome’ |
| —disable-javascript 可用 | Chrome 134 中失效 | 新 headless 不支持 |