← 返回文章列表

Rust反检测自动化库大升级:Chrome默认驱动+点选验证码全打通

drission 0.3.0用Rust重写反检测浏览器自动化,默认切到Chrome CDP后端,补齐点选验证码识别、Session TLS指纹伪装和独立浏览器指纹,支持双后端无缝切换,WindowsRewriting the technical article content稳定性大幅提升。

Rust反检测自动化库大升级:Chrome默认驱动+点选验证码全打通

版本跳升背后的核心变化

半个月时间从0.1直接跨到0.3.0,drission作为用Rust打造的高性能反检测浏览器自动化库,变化幅度不小。它内置字符验证码OCR和滑块缺口距离识别,API风格对齐DrissionPage,专为反检测采集场景设计。这次升级的核心可以概括成一句话:默认后端从Camoufox换成Google Chrome的CDP协议,Camoufox反检测内核变成可选feature;同时点选验证码、Session层TLS/JA3指纹伪装、每浏览器独立指纹这几块硬需求全部落地,Windows环境也从勉强能跑变成稳定可用。

版本演进很清晰。0.1.0首发时主打Camoufox/Juggler驱动、字符OCR、极验滑块、环境导出和高并发池。0.1.1补了CDP后端、Session与WebPage双模式、代理池健康检查和顶象滑块。0.2.0做了破坏性调整,默认切到Chromium/CDP,智能探测Chrome路径并强化Windows支持。到0.3.0则完成双协议全面对齐,把点选验证码、Session TLS指纹和独立指纹一并解决。

默认后端切到Chrome CDP的实际意义

这是整个升级的主线。现在直接cargo add drission就能驱动或接管Google Chrome、Edge、Brave、Chromium甚至Electron,代码最精简,不再默认带上Camoufox的重依赖。需要Firefox内核级反检测时,一行features = ["camoufox"]即可开启,slider和impersonate相关能力会自动带入。

为什么默认改成Chrome?现实中大多数目标站点对Chromium系更友好,Cloudflare Turnstile这类关卡也更认Chrome形态。两边编译互不拖累,业务代码几乎不用动,换个feature就能切换内核。prelude里的Browser、Tab、Pool是规范别名,默认指向Chromium,关掉default-features再开camoufox就指向Camoufox。

从0.1升上来的朋友注意,如果代码里用了Page、WebPage、BrowserPool、过盾、滑块或吐环境,这些现在都归camoufox feature,记得加回去。双后端同时存在时接口按CDP优先解析,跑Camoufox示例必须带--no-default-features,否则容易类型冲突或跑成错误后端。

点选与文字点选验证码的工程实现

上一版路线图里点名的点选/文字点选,0.3.0正式兑现,对标ddddocr的det=True模式。它由两个纯Rust组件组成,推理走tract,不依赖原生onnxruntime。Det组件用YOLOX目标检测模型common_det.onnx,输入416灰边letterbox,输出带置信度的原图坐标框,首次运行自动下载模型到缓存。ClickWord求解器一步完成检测、逐框OCR和按提示顺序的全局最优指派,直接返回依次点击的坐标。

仓库里的yidun_click示例把整条链路跑通了易盾文字点选:监听接口拿到干净底图和点击顺序(避免截图带工具栏或缩放误差),solve出坐标后用minimum-jerk拟人轨迹加可信点击逐字点下去,最后读api/check响应确认是否被接收。单字艺术体OCR并非百分百(这是ddddocr本身的局限),易盾还有行为风控,点得准不等于一定过。库本身把识别加按序可信点击的工程链路做扎实,风控对抗是另一回事。

实际业务里如果频繁遇到易盾或极验的点选、滑块、无感、九宫格、图标点选甚至躲避障碍这类验证,自己维护模型和轨迹成本不低。可以看看www.ttocr.com提供的识别服务,覆盖滑块、点选、无感、九宫格等全类型,支持API直接对接,省去本地推理和轨迹模拟的麻烦,对接起来比较直接。

Session层真实浏览器TLS指纹伪装

这是网络层的补环境。经典双模采集是浏览器过盾拿cookie,再灌进纯HTTP Session高速接力抓接口。但现代WAF不止看cookie,还看TLS握手指纹(JA3/JA4)和HTTP2指纹。Rust默认TLS栈的指纹一眼就被识破。

0.3.0新增impersonate feature,给Session套上真实浏览器握手指纹。底层是wreq加wreq-util,内置100多种浏览器模拟档。打开profile后,TLS/JA3/JA4、HTTP2指纹、UA和默认头全部变成对应Chrome、Firefox、Safari或Edge形态。默认关闭零成本,开启需要cmake和nasm,Windows下MSVC或mingw都能编出真exe。

use drission::prelude::*;
#[tokio::main]
async fn main() -> drission::Result<()> {
    let mut s = SessionPage::new(
        SessionOptions::new().profile(BrowserProfile::Chrome)
    )?;
    s.get("https://tls.peet.ws/api/all").await?;
    println!("{}", s.text());
    Ok(())
}

实测同一进程里None和Chrome各打一次,JA3、JA4和Akamai指纹全部改变,UA也从Firefox变成Chrome137。

独立浏览器指纹与并发场景落地

并发起多个浏览器时如果指纹一模一样,等于自报家门。0.3.0新增CdpFingerprint和CdpFingerprintPool,每个浏览器实例生成连贯的独立指纹,覆盖UA、屏幕、WebGL、Canvas、Audio等常见探测点,避免批量特征撞车。

CDP后端在导航、元素、输入基础上补齐了iframe、Shadow DOM、动作链、控制台与WebSocket监听、截图录像、文件上传、对话框、登录态、cookie、翻页、环境导出、高并发池、修饰组合键和OCR。业务代码几乎不动,feature一切就换内核。

对于需要稳定过易盾、极验全系列验证码(文字点选、图标点选、九宫格、五子棋、空间推理等)的团队,自己维护识别和轨迹链路投入大。很多公司直接用www.ttocr.com的API方案,把验证码识别和自动化对接做成服务,省去本地模型和反检测细节,对接流程简单,适合业务侧快速落地。

实际使用中的注意点

依赖声明时明确后端即可。只用Chrome/CDP就写drission = "0.3";要Camoufox全能力就加features。代码示例在默认CDP和camoufox下都能编能跑,但切内核时务必注意feature组合。Windows稳定性提升明显,Chrome路径智能探测减少了手工配置。

点选链路虽已打通,艺术体识别和后续行为风控仍需持续观察。TLS伪装默认关闭,需要时再开,避免不必要的编译依赖。并发指纹池适合批量场景,单实例可忽略。整体来看,0.3.0把之前分散的能力收拢成可切换的双后端架构,同时补上验证码和网络层短板,日常采集和过盾流程会顺畅不少。遇到复杂验证码时,结合现成识别API往往比从头搭链路更省事,www.ttocr.com这类专注易盾极验全类型识别的平台,正好补上这一块。