Playwright 还是 nodriver?insane-search 浏览器回退 4 大执行器选型全解析
【免费下载链接】insane-searchAuto-bypass for blocked websites in Claude Code — Phase 0→3 adaptive scheduler, no API keys项目地址: https://gitcode.com/gh_mirrors/in/insane-search
insane-search 是一个专为 Claude Code 打造的网页自动回退抓取插件:当普通请求遭遇 403、WAF 拦截或 JS 挑战时,它会沿 Phase 0→3 逐级升级,最终调度Playwright、nodriver、patchright等浏览器执行器读取公开内容——全程无需 API Key。本文带你弄清:这 4 大浏览器回退执行器到底怎么选、何时轮到哪里、又凭什么下判断。
什么时候才会轮到"浏览器执行器"?
很多新手会误以为 insane-search 一上来就开浏览器。恰恰相反,它的调度哲学是:先用最便宜的公开路径,失败了才升级。
四个阶段的分工是这样的:
| 阶段 | 手段 | 特点 |
|---|---|---|
| Phase 0 | 平台官方公开 API(Reddit.rss、X oEmbed、yt-dlp等) | 最便宜、最稳定 |
| Phase 1 | 轻量探针 + URL 变体(.json/.rss/m.前缀) | 一次请求,快速试错 |
| Phase 2 | TLS 指纹伪装(curl_cffi:safari → chrome → firefox 网格) | 无浏览器开销 |
| Phase 3 | 真实浏览器执行器 | 本文主角 |
只有当 TLS 伪装网格全部失败、或检测到 JS 挑战信号时,fetch_chain.py 才会进入 Phase 3 的浏览器回退。而且它很"诚实":遇到真正的登录墙/404 会直接跳过浏览器(浏览器也没用),遇到 429 限速则坚持认为"值得再试"。
核心机制:能力标签自动路由,不用你手动选
选型逻辑全部集中在 executor.py。它不做任何猜测,而是读取 waf_profiles.yaml 中每个 WAF 档案声明的capabilities_needed标签,按下表自动匹配执行器:
| 能力标签组合 | 选中执行器 | 典型对手 |
|---|---|---|
needs_protocol_stealth | ① protocol_stealth_chrome(nodriver → patchright) | 会嗅探 CDP 自动化协议的关卡 |
needs_real_tls_stack+needs_js_exec | ② playwright_real_chrome.js(本地 Node + 系统 Chrome) | Akamai Bot Manager |
needs_js_exec仅此一项 | ④ Playwright MCP | Cloudflare 基础挑战 |
needs_mobile_context | ③ playwright_mobile_chrome.js(iPhone 13 Pro 模拟) | 需要移动端上下文的站点 |
也就是说:"Playwright 还是 nodriver"不是你的问题,而是 WAF 档案的问题。你唯一要做的,是让引擎跑完它的网格。
执行器一:protocol_stealth_chrome —— 协议级隐身冠军
这是最"特殊"的一位,由 nodriver_fetch.py 与 patchright_fetch.py 两个模板构成,执行顺序为:
- nodriver:不走 Playwright 封装层,直接用裸 CDP(Chrome DevTools Protocol)WebSocket 驱动系统 Chrome。
- patchright:若 nodriver 未安装,退到 patchright(Apache-2.0 的 Playwright 兼容分叉,自带 CDP 泄漏修补)。
为什么它排第一?2026 年的反检测基准实测发现:像 Akamai、DataDome 这类高级关卡会指纹化"自动化协议本身"——也就是 CDP 的Runtime.enable/Target.setAutoAttach启动泄漏。凡是带 Playwright 封装层的驱动,无论打什么补丁都会被拦;而裸 CDP 控制面可以干净通过。
📌 实测数据:Cloudflare Turnstile 页面上,旧策略全部失败;改用 nodriver 后7.8 秒拿到 49KB 的
weak_ok页面(见 CHANGELOG.md)。
nodriver 是 AGPL 协议、patchright 是 Apache-2.0,项目在"免付费方案最强"与"再分发安全"之间用双模板做了平衡。
执行器二:playwright_real_chrome —— 真实 Chrome 的主力
对应模板 playwright_real_chrome.js,由本地 Node 子进程运行,核心策略有三板斧:
channel: 'chrome':驱动系统安装的真实 Chrome,而不是 Playwright 捆绑的 Chromium——因为捆绑 Chromium 的 BoringSSL TLS 指纹会被 Akamai 这类 WAF 秒识别。- 驱动降级链:优先
require('patchright')(免Runtime.enable泄漏),没有则退playwright-extra + stealth,再没有就是原生 playwright,三者都保持真实 Chrome 通道。 - 预热跳板:先访问站点根目录等 3.5 秒,让 Akamai 式 JS 传感器种下"已解决"的会话 Cookie,再访问目标深链——避免"首击必拒"的经典坑。
依赖首次回退时自动安装到~/.insane-search/node(不下载捆绑浏览器),升级插件后还能复用,详见 playwright.md。
执行器三:playwright_mobile_chrome —— 移动端模拟专岗
模板 playwright_mobile_chrome.js 默认以iPhone 13 Pro的完整设备画像(UA / 视口 / 触摸事件)运行,但 TLS 层依然是真实 Chrome。
这个组合很妙:TLS 指纹保持 Chrome 级(WAF 信任度高),HTTP 层伪装成移动端(很多站点给m.端更宽松的防御)。桌面与移动端使用互相隔离的 Chrome Profile 目录,Cookie 与模拟状态互不串味。
执行器四:Playwright MCP —— 会话直驱的"外援"
这一位比较特别:它不是子进程,而是 Claude 会话里直接调用的mcp__playwright__*工具。适用于只需 JS 执行、不需要真实 TLS 的场景(如 Cloudflare 基础挑战、无挑战的 SPA)。
典型工作流:browser_navigate→browser_wait_for→browser_snapshot回收渲染后的正文;进阶玩法是用browser_network_requests抓出 WAF 背后的内部 JSON API,再拿 curl 级别的成本直接采集。
由于 Python 侧引擎无法启动 MCP,fetch_chain.py 会在结果里留下must_invoke_playwright_mcp标志和untried_routes提示,明确告诉 AI:"这条路我还没走完,请从会话里补上"——而不是假装已经穷尽。
常见疑问快答 💬
Q:为什么不直接全用 Playwright,省事吗?A:省事但无效。捆绑 Chromium 的 TLS 指纹在 Akamai/PerimeterX/DataDome 面前等于自报家门,293 字节的 "Access Denied" 就是回应。真实 Chrome 通道 + 协议级隐身才是通关钥匙。
Q:为什么浏览器默认是"有头"(headful)模式?A:headless Chrome 在指纹检查之前就会因"无头信号"被直接判为机器人。四个执行器默认headless: false,可显式覆盖。
Q:浏览器通过后,后续请求要一直开着浏览器吗?A:不用。executor 实现了"Cookie 桥":浏览器解掉挑战后,把 Cookie 与 User-Agent 注入 curl_cffi 会话池,同主机的后续页面走 HTTP 级低成本采集即可——浏览器只出场一次。
Q:模板输出的 HTML 直接信任吗?A:不会。所有浏览器结果都走 JSON 信封(html / status / finalUrl / cookies / innerText)解析,解析失败一律丢弃(信封里带着 Cookie,宁缺勿漏);HTML 还要再过一遍 4 层验证器,挑战页照样判挑战。
选型速记表
| 场景 | 执行器 | 一句话理由 |
|---|---|---|
| CDP 协议指纹关卡(Akamai/DataDome/PerimeterX/Kasada) | nodriver | 裸 CDP,绕过一切 Playwright 封装泄漏 |
| 真实 TLS 检测 + JS 挑战 | playwright_real_chrome.js | 系统 Chrome 的真指纹 + patchright |
| 需要移动端上下文 | playwright_mobile_chrome.js | Chrome TLS × iPhone 画像的混合身份 |
| 仅需 JS 执行(Cloudflare 基础/SPA) | Playwright MCP | 会话直驱,还能顺带挖内部 API |
这套"能力标签 → 自动路由 → 验证回滚"的设计,让使用者永远不需要回答"Playwright 还是 nodriver"——引擎会替你把答案算出来。🚀
延伸资料
- 执行器路由源码:engine/executor.py
- WAF 能力档案与回退顺序:engine/waf_profiles.yaml
- 抓取链与 Phase 3 触发逻辑:engine/fetch_chain.py
- 浏览器回退专题参考:references/playwright.md
- 平台覆盖清单:PLATFORMS.md
- 使用边界与免责声明:DISCLAIMER.md
【免费下载链接】insane-searchAuto-bypass for blocked websites in Claude Code — Phase 0→3 adaptive scheduler, no API keys项目地址: https://gitcode.com/gh_mirrors/in/insane-search
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考