隐匿浏览器,专为 Playwright 与 Puppeteer 打造
Clearcote 就是 Chromium,所以你已有的自动化代码照常可用。把启动调用换成 SDK 的 launch(),你会拿回一个用起来和 Browser 一样的 Playwright 句柄(运行在一次性配置文件上,所以 newContext() 返回的是同一个上下文)。它背后运行的构建把身份控制编译进了引擎,而不是以 JavaScript 注入。
开源版构建无需账号。最新构建通过 GitHub 免费版即可免费使用,同一时间一个浏览器。
只改启动那一行,其余照旧
# pip install clearcote
from clearcote import launch
browser = launch(fingerprint="account-42", light_stealth=True)
page = browser.new_page()
page.goto("https://example.com")
browser.close()亮点
一行代码完成迁移
launch() 返回一个运行在一次性配置文件上的 Playwright 句柄,选择器和页面对象都保持原样;它的 newContext() 返回的是同一个上下文,所以在需要隔离上下文的地方,请传入 ephemeralProfile: false。Puppeteer 通过 puppeteer.connect 连接 serve() 的 CDP 端点。
自动获取经过校验的二进制文件
首次使用时,SDK 会下载匹配的构建并校验其 SHA-256:开源版构建对照 SDK 内置的哈希,授权版构建对照下载接口返回的哈希。需主动开启的自动更新(仅限开源版构建)会用已发布的校验和检查最新版本;如果装了 gpg,还会验证它们的 GPG 签名。
身份即命名选项
fingerprint、platform、brand、timezone、acceptLanguage、proxy 和 geoip 都是参数,而不是需要你记住的命令行开关。一个种子就能让身份在多次运行之间保持稳定。
一致的默认设置
有头启动会跳过模拟视口,让页面尺寸与真实窗口一致;WebRTC 会保护你本机的地址;使用代理时 QUIC 会关闭,不会有 UDP 流量绕开代理。
拟人化输入,一个参数
humanize: true 会把点击、打字、拖拽和滚动作为可信的原生输入、沿弧形路径发送,navigator.webdriver 保持为 false。
三种语言
Python(同步和异步)、Node 和 .NET,分别发布在 PyPI、npm 和 NuGet 上。.NET 同样支持 geoip,拟人化输入则以 HumanClickAsync 这类显式调用提供;已保存的配置文件、渲染一致性检查、Widevine 和智能体辅助功能目前仅支持 Python 和 Node。
SDK 替你做了什么
这个包封装了 Clearcote 二进制文件,让身份选项变成命名参数。它按固定顺序解析浏览器(显式路径、CLEARCOTE_BINARY 环境变量、你指定的 version、找到许可证密钥时的最新授权版构建,最后是 SDK 中锁定的开源版构建),完成校验和缓存,通过 Playwright 启动它,再把你的代码已经在用的那些对象交还给你。
由于这些控制都在 C++ 引擎中,无需加载任何 stealth 插件,也不会向页面注入任何东西。插件是从 JavaScript 修补属性的,而被修补的 getter 和原生 getter 能被区分开来。在这里,getter 就是原生的——主框架、iframe 和 worker 中都是如此。检测原理解释了这一点为何重要。
有两处行为与原版 Chromium 不同,都是有意为之。第一,控制台和页面错误事件不会转发给自动化客户端,因为这种转发恰恰是自动化探测要测量的东西;请在页面内收集它们,再用 page.evaluate() 读回来。第二,在授权版构建(GitHub 免费版即可使用)上,带用户名和密码的 SOCKS5 代理可以直接使用,凭据以独立的 username 和 password 字段传入,因为引擎实现了原版 Chromium 所缺少的认证。开源版构建无法向 SOCKS5 代理进行认证。
stealth 插件与引擎层面浏览器的对比
开源的 stealth 插件是合理的第一步,很多项目都是从那里起步的。想了解更全面的情况,请参阅与 puppeteer-extra-plugin-stealth 的对比。
典型用途
网页抓取与数据采集
保留你现有的 Playwright 或 Puppeteer 爬虫,只换掉它底下的浏览器。
在真实页面上做端到端测试
在那些把原版自动化 Chromium 与普通浏览器区别对待的网站上测试流程。
迁移现有测试套件
选择器和页面对象原封不动,只改启动调用。每个测试都新开上下文的 fixture 需要设置 ephemeralProfile: false,因为 launch() 的 newContext() 返回的是它唯一的那个配置文件上下文。
指纹识别研究
用同样的脚本分别在有、无身份画像的情况下运行,比较页面测量到的结果。
Clearcote 专为隐私保护、测试、研究和合法自动化而打造。你须对自己的使用方式负责,并遵守所访问网站的条款。
哪些套餐包含此功能
SDK 在全部三个套餐中都可用,几乎所有身份选项也是如此(少数需要授权版构建的选项已在指纹参数列表中标出)。没有密钥时,它运行开源版构建;有许可证密钥(用 GitHub 账号即可免费获取)时,它运行最新构建,并附带价格页面上列出的授权版专属功能。
对比套餐常见问题
它真的能直接替换吗?
几乎完全可以。同步 Python 和 Node 的 launch() 返回一个类似浏览器的句柄,运行在一次性配置文件上:newPage() 及其后的一切照常工作,但 newContext() 返回的是同一个上下文,所以需要隔离上下文的代码应传入 ephemeralProfile: false,或者每个上下文启动一个浏览器。launchPersistentContext() 返回标准的 BrowserContext。Puppeteer 通过 puppeteer.connect 连接 serve() 的 CDP 端点;.NET SDK 返回标准的 Microsoft.Playwright 对象(LaunchEphemeralProfileAsync 返回 IBrowserContext,LaunchAsync 返回 IBrowser)。
我还需要 puppeteer-extra-plugin-stealth 或 playwright-stealth 吗?
不需要,而且最好别加。这些插件通过注入的 JavaScript 修补各项值,而修补行为本身就可能被察觉。Clearcote 在引擎中设置这些值,插件已经没有什么可修补的了。
它支持无头模式吗?
可以。不过在条件允许时,有头模式仍是更稳妥的默认选择,因为无头模式有它自己的特征。在容器中,官方 Docker 镜像默认在虚拟显示器下以有头模式运行。
支持哪些语言?
Python(同步和异步 API)、Node.js 和 .NET。三者都支持 geoip 匹配和拟人化输入(Python 和 Node 中是一个启动参数,.NET 中是 HumanClickAsync 这类显式调用)。已保存的配置文件、渲染一致性检查、Widevine 和浏览器内置智能体目前仅支持 Python 和 Node。
如何在多次运行之间保持同一个身份?
复用同一个 fingerprint 种子,并配合用户数据目录使用 launchPersistentContext,让 cookie 和存储持久保留。用你自己的账号 ID 或租户 ID 派生种子,就能让它可复现。参见持久化身份。
在文档中深入了解
相关功能
一个选项,就能让 Playwright 的点击、打字、拖拽和滚动拥有弧形路径和真人节奏,并且仍然是可信的原生输入。
Canvas、WebGL、WebGPU、音频、字体、屏幕和硬件都由 C++ 引擎从一个种子派生,区域设置和时区也随之匹配,让每个检测面彼此一致。
设置代理并开启 geoip,时区、语言和 WebRTC 就会跟随出口 IP。在授权版构建上,带用户名和密码的 SOCKS5 可以直接使用。
通过官方 Docker 镜像、serve() 或 CLI,把 Clearcote 作为常驻 CDP 端点运行,任何框架都能直接连接,无需改代码。
相关阅读
试用 Clearcote
可直接接入 Playwright 与 Puppeteer,一直到 TLS 握手都保持一致,并提供开源构建作为起点。
通过 GitHub 可免费使用一个浏览器。无需信用卡。