【免费下载链接】ruyipage
下一代Python的web自动化过检测框架,AI自我调试运行,trace日志可分析一切网页链路,通过一切网站检测的Firefox指纹浏览器。RuyiPage is a Python-based Firefox automation framework built on the next-generation WebDriver BiDi protocol.
ruyiPage 是一个基于 W3C 新一代WebDriver BiDi 协议的 Python Web 自动化过检测框架,核心卖点很直接:核心规范快照中 67 个命令、24 个事件实现 100% 覆盖,且全程不依赖 CDP。对于做高风控站点自动化、数据采集的新手来说,这意味着更少的检测暴露面、更原生的isTrusted输入行为。本文带你用通俗的视角拆解这套"67 命令 × 24 事件"架构是如何设计和验证的。
为什么是 WebDriver BiDi 而不是 CDP?
市面上多数自动化框架(如 Puppeteer、DrissionPage)都构建在 CDP(Chrome DevTools Protocol)之上。CDP 是 Chrome 私有协议,Firefox 141 版本已彻底移除 CDP 支持,且 CDP 暴露面较大,容易被风控针对性识别。
ruyiPage 选择反其道而行:
- 以Firefox 为核心浏览器,以WebDriver BiDi(W3C 双向标准协议)为唯一底层
- 无 CDP 暴露面,天然更贴近真实用户浏览器行为
- 原生动作链优先,输入、点击、拖拽保持
isTrusted
正因为走的是 BiDi 主路线,ruyiPage 能直接驱动真实浏览器内核通过各类风控挑战:
67命令 × 24事件:覆盖全景一图看懂
WebDriver BiDi 核心规范定义了 10 个模块。ruyiPage 的覆盖报告 W3C_BIDI_COMPARISON.md 给出的结论是0 缺失、100.0%:
| 模块 | 命令数 | 已封装 | 事件数 | 可订阅 | 典型能力 |
|---|---|---|---|---|---|
| session | 5 | 5 | 0 | 0 | 建会话、订阅/退订事件 |
| browser | 7 | 7 | 0 | 0 | 创建 user context、下载行为、客户端窗口 |
| browsingContext | 15 | 15 | 14 | 14 | 导航、截图、定位节点、录屏、弹窗处理 |
| emulation | 13 | 13 | 0 | 0 | UA、时区、地理位置、触摸、网络条件仿真 |
| network | 13 | 13 | 5 | 5 | 拦截、mock、续传请求、数据收集器 |
| script | 6 | 6 | 3 | 3 | 执行 JS、preload 脚本、realm 管理 |
| storage | 3 | 3 | 0 | 0 | Cookie 读取/设置/删除 |
| input | 3 | 3 | 1 | 1 | 原生动作链、释放按键、文件设置 |
| webExtension | 2 | 2 | 0 | 0 | 安装/卸载扩展 |
| log | 0 | 0 | 1 | 1 | 日志条目推送 |
| 合计 | 67 | 67 | 24 | 24 |
值得注意的是,这 67 命令之外 ruyiPage 还额外提供了 Firefox 专属扩展命令(如emulation.setBypassCSP、permissions.setPermission),实际能力超过 W3C 核心面。
四层架构:从 WebSocket 到高层 API
整个协议栈按"字节收发 → 命令路由 → 会话管理 → 模块封装"分四层,职责清晰、互不越界:
1. WebSocket 传输层
BiDiTransport 只负责一件事:建立 WebSocket 连接、线程安全地发送 JSON 消息、后台线程持续接收。它不理解任何 BiDi 语义,保证传输层的纯粹与稳定(断线、超时都有明确回调)。
2. 命令分发层
CommandDispatcher 为每条命令分配唯一 ID,维护 pending 队列,把 Transport 收到的响应精确路由回发起者,并支持同步阻塞等待 + 超时控制。这正是 BiDi"双向异步"协议在 Python 侧的标准解法。
3. 驱动与会话层
BrowserBiDiDriver 管理整个 BiDi 会话生命周期:连接、重连、事件路由分发,并通过 greenlet 桥接提供 async/await 异步支持(pip install ruyiPage[async]即可启用)。
4. 协议模块封装层(67 命令所在)
ruyipage/_bidi/ 目录一个 W3C 模块一个文件,67 个命令全部在这里被封装成带参数校验的 Python 函数:
- session.py:建会话与事件订阅,其中
subscribe_compatible会逐事件重试,避免某个版本不支持的事件拖垮整批订阅 - browsing_context.py:导航、截图、元素定位、录屏等 15 命令
- emulation.py:13 个仿真命令,UA、时区、屏幕、触摸全覆盖
- network.py:拦截、mock、
provideResponse等 13 命令 - script.py:
evaluate/callFunction/ preload 脚本
24 事件的通用订阅设计
24 个事件(14 个 browsingContext、5 个 network、3 个 script、1 个 input、1 个 log)没有逐个写死回调,而是通过 EventTracker 与 BidiEvent 实现通用订阅:page.events一个入口订阅任意事件,完整事件载荷保留在BidiEvent.params中,同时提供context、response、realm等便捷属性。这种"命令显式封装、事件统一透传"的设计,是让 24 个事件都能被 100% 覆盖的关键。
如何保证 100% 覆盖不回归?
"100% 覆盖"不能只靠口头承诺,ruyiPage 用"快照 + 报告 + 测试"三件套锁死了这个结论:
- 规范快照:w3c_bidi_apis.json 固定记录了 W3C Editor's Draft 某个 commit 的 67/24 命令事件清单,可复现、可对比
- 覆盖报告:generate_comparison.py 用 AST 静态扫描
_bidi源码中实际调用的命令字面量,生成 W3C_BIDI_COMPARISON.md;extract_w3c_bidi.py 可随时同步最新规范草稿 - 持续测试:
- tests/test_w3c_bidi_coverage.py 断言快照中 67 命令、24 事件零缺失,且报告文件与源码实时一致
- tests/test_bidi_schema_conformance.py 校验参数 schema 与最新规范字段一致
- tests/test_bidi_protocol_conformance.py 验证协议行为符合性
也就是说,规范一旦更新,跑一下同步脚本 + 测试,缺失项会立刻暴露——这是比"宣称支持"可靠得多的工程化保障。
从协议到实战:高层 API 怎么用?
底层 67 命令全部被上层易用 API 吸收,新手不需要手写 BiDi 参数:
page.events.start(["network.responseCompleted"]) # 一个入口订阅24类事件- 元素定位走
browsingContext.locateNodes原生命令,能直接穿透 closed shadow root 与 iframe:
- emulation 13 命令驱动指纹仿真,时区、语言、Canvas 指纹在检测页上呈现高度一致的真实画像:
- network 拦截 13 命令支撑请求改写、mock、抓包,配合拟人输入可稳定通过 hCaptcha 等强风控:
完整的命令对照表、事件清单及运行时说明,可查阅覆盖报告 W3C_BIDI_COMPARISON.md;scripts/check_bidi_coverage.py 提供了命令行快速核对入口。
总结
ruyiPage 的 100% BiDi 覆盖不是营销口号,而是一套可验证的工程体系:
| 层面 | 做法 | 效果 |
|---|---|---|
| 协议 | Firefox + WebDriver BiDi,无 CDP | 检测暴露面最小 |
| 命令 | 67/67 显式封装于_bidi模块 | 参数校验、开箱即用 |
| 事件 | 24/24 通用page.events订阅 | 全载荷透传、零遗漏 |
| 工程 | 快照 + 报告 + 三套测试 | 规范更新不回归 |
如果你想体验,pip install ruyiPage后参考根目录 00_quickstart.py 与 26_browsing_context_advanced.py 即可上手——用一行代码站在 W3C 新一代自动化协议的全量能力之上。🚀
【免费下载链接】ruyipage
下一代Python的web自动化过检测框架,AI自我调试运行,trace日志可分析一切网页链路,通过一切网站检测的Firefox指纹浏览器。RuyiPage is a Python-based Firefox automation framework built on the next-generation WebDriver BiDi protocol.
相关推荐
Puppeteer Browser.close() 详解:从 API 签名到 CDP/WebDriver BiDi 双协议关闭实现
Puppeteer Browser.close 详解:从 API 签名到 CDP/WebDriver BiDi 双协议关闭实现 Browser.close 是
浏览器控制测试网页爬虫开发工具如何解决Selenium WebDriver中Chrome无痕模式与BiDi协议的兼容性问题
如何解决Selenium WebDriver中Chrome无痕模式与BiDi协议的兼容性问题 Selenium WebDriver作为最流行的Web自动化测试框
测试开发工具Ludo核心功能全解析:从游戏加载到音频视频设置的终极教程
Ludo核心功能全解析:从游戏加载到音频视频设置的终极教程 Ludo是一款用Golang编写的libretro前端,它为玩家提供了便捷的游戏模拟体验,支持游戏加
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考