默认启动的playwright无头浏览器大概率秒封,因其暴露navigator.webdriver=true等数十个自动化痕迹;需协同禁用启动参数、伪装指纹、模拟真实行为才能有效绕过检测。

默认启动的 Playwright 无头浏览器几乎必然被识别——不是“可能”,而是“大概率秒封”。关键不在是否无头,而在它暴露的数十个自动化痕迹是否被系统性抹除。
为什么 navigator.webdriver === true 是第一道死亡红线
真实用户浏览器里 navigator.webdriver 是 undefined 或 false;Playwright 默认设为 true,相当于在 DOM 里挂了块“我是机器人”的牌子。几乎所有专业检测脚本(如 FingerprintJS、Intoli)第一行就查这个。
- 仅靠
page.add_init_script()覆盖是不够的:它只作用于页面上下文,而某些检测会提前在 iframe 或 service worker 中读取 - 必须配合启动参数
--disable-blink-features=AutomationControlled,从 Chromium 渲染进程层切断源头 - 如果目标站用
window.chrome或permissions.query做二次校验,还需额外注入脚本补全属性,否则仍会暴露
viewport、userAgent 和屏幕特征必须协同伪装
单独换一个 User-Agent 毫无意义。检测系统会交叉比对:navigator.platform 是否匹配 User-Agent 字符串里的 OS 标识?screen.width 是否与设置的 viewport 一致?devicePixelRatio 是否符合该分辨率下常见设备范围?不一致就是“伪造”信号。
- 设置
viewport时别用整数宽高(如 1920×1080),真实用户设备有缩放、任务栏占用等,建议用{"width": 1366, "height": 768}这类常见非标值 -
User-Agent必须和context初始化时传入,不能只靠set_extra_http_headers()—— 后者只改请求头,不影响 JS 环境里的navigator.userAgent - 务必同步设置
locale和timezone,比如en-US+America/New_York,否则navigator.language和Intl.DateTimeFormat().resolvedOptions().timeZone会穿帮
args 启动参数里藏着五个必禁项
Chromium 在自动化模式下会自动注入调试标识,这些参数在真实 Chrome 浏览器进程中根本不存在,是静态扫描的首要目标。
-
--disable-blink-features=AutomationControlled:禁用 blink 层自动化标记(最核心) -
--disable-infobars:移除顶部“Chrome 正受到自动测试软件控制”提示条 -
--disable-extensions:避免插件列表为空或异常(真实用户通常装有若干插件) -
--disable-dev-shm-usage:防止 /dev/shm 共享内存路径暴露容器环境 -
--no-sandbox在 Docker 等受限环境中必须加,但需配合--disable-setuid-sandbox使用,否则反而触发风控
stealth 注入脚本不是万能解药
playwright-stealth 确实封装了 17 个指纹模块,但它默认只处理 JS 上下文层,对 WebGL、Canvas、AudioContext 等底层渲染指纹无能为力。更麻烦的是,它的部分补丁(如伪造 plugins 列表)在新版 Chromium 中已被废弃 API,反而导致 TypeError 报错,让脚本直接崩溃。
- 不要无脑
await page.add_init_script(stealth),先确认目标站是否真用到它覆盖的检测点 - 优先手动注入最小化脚本,例如只覆盖
navigator.webdriver、window.chrome、permissions查询返回值 - Canvas 指纹无法完全伪造,唯一可靠方案是拦截
canvas.getContext('2d')并返回空对象——但这会破坏页面正常功能,需权衡
绕过检测不是堆参数,而是做减法:把 Playwright 默认暴露的每一个非人类特征,按优先级一个个关掉。最容易被忽略的点是 hardwareConcurrency 和 deviceMemory ——它们在真实设备上是整数,而 Playwright 默认返回 0 或极小值,一查就露馅。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











