【免费下载链接】ruyipage
下一代Python的web自动化过检测框架,AI自我调试运行,trace日志可分析一切网页链路,通过一切网站检测的Firefox指纹浏览器。RuyiPage is a Python-based Firefox automation framework built on the next-generation WebDriver BiDi protocol.
ruyiPage 是一款基于 WebDriver BiDi 协议的 Python Firefox 自动化与指纹浏览器框架。它的 Debug Trace 日志能把页面链路中的每条命令、每个事件、每个网络请求变成可回溯的时间线;配合失败快照(FailureSnapshot),在元素查找失败、JS 异常等时刻自动保存截图、DOM、URL 和最近网络请求,让网页链路问题无处遁形。
为什么网页自动化失败后难以定位?
用 Python 做网页自动化时,失败往往只有一句干巴巴的报错:
- 元素没找到,但到底是页面没加载完、结构变了,还是被反检测拦截?
- JS 执行抛错,却不知道报错那一刻页面处于什么状态;
- 请求看似正常,实际某个接口返回了 403/500,却没有被记录下来。
ruyiPage 的 Debug Trace 就是为解决这类"黑盒失败"而设计的:🕵️ 它把浏览器内部发生的事结构化地记录下来,事后可以逐条回放。核心实现见 tracer.py,官方演示脚本是 47_trace_and_diagnostics.py。
两种武器:Trace 时间线 与 失败快照
| 能力 | 作用 | 默认状态 |
|---|---|---|
| Trace 时间线 | 记录所有 BiDi 命令、事件、网络拦截与关键异常,含耗时与状态 | 关闭 |
| 失败快照 | 操作失败时自动收集截图、DOM、URL、最近网络请求、trace 记录 | 关闭 |
两者都是"默认关闭、开启零侵入"的设计:关闭时每次命令只多一次属性检查(约 10ns),不影响正常运行性能。
三种方式快速开启 Trace 日志
方式 A:launch() 一行参数(最简单)
page = launch(trace=True, failure_snapshot=True, snapshot_dir="./diag")方式 B:FirefoxOptions 链式配置
opts = FirefoxOptions() opts.enable_trace(True) # 启用 trace 时间线 opts.enable_failure_snapshot() # 启用失败快照 opts.set_snapshot_dir("./diag") # 快照保存目录 page = FirefoxPage(opts)相关 API 定义在 firefox_options.py,还支持quick_start(trace=True, failure_snapshot=True)一键配置。
方式 C:Settings 全局开关
Settings.trace_enabled = True # 全局开启 trace Settings.trace_max_entries = 2000 # 缓冲区最大条目(默认 1000) Settings.failure_snapshot_enabled = True # 全局开启失败快照全部配置项汇总在 settings.py 的"诊断与追踪"段落中。
Trace 时间线:一条命令回放整条网页链路
开启后,page.trace就是整条链路的时间线(挂载在浏览器级单例上,所有 tab/frame 共享)。每条记录包含:分类(BiDi 命令 / 事件 / 网络拦截 / 异常)、事件名、耗时毫秒数、状态(ok / error / timeout / warn)以及关联的上下文 ID。
常用 API 一览:
| API | 用途 |
|---|---|
page.trace.latest(n) | 获取最近 N 条记录,快速定位失败点 |
page.trace.summary(n) | 生成人类可读的时间线摘要 |
page.trace.recent_requests(n) | 查看最近 N 条网络请求(方法/状态码/URL) |
page.trace.dump_json() | 全量导出为 JSON,便于交给工具或 AI 分析 |
page.trace.clear() | 清空缓冲区,开始新一轮观测 |
summary()输出的大致形态是每行"时间 + 耗时 + 分类 + 事件名 + 状态",扫一眼就能发现哪条命令超时或报错。dump_json()则是结构化全量数据——这也是 ruyiPage "AI 自我调试"能力的数据来源:把 JSON 交给模型即可自动分析链路问题。
失败快照:报错那一刻的"事故现场"
当元素查找失败、页面加载超时、JS 执行异常时,框架会自动把诊断数据挂到异常对象的.diagnostics属性上(属性声明见 errors.py):
try: page.ele('#submit-btn', timeout=3) except ElementNotFoundError as e: if e.diagnostics: print(e.diagnostics.summary()) # 人类可读摘要 print(e.diagnostics.to_json()) # 结构化导出一份失败快照(FailureSnapshot)包含:
- 错误信息:异常类名 + 消息、失败时的页面 URL;
- 截图路径:失败瞬间的页面截图,直接看到页面长什么样;
- DOM 快照路径:当时的 HTML 结构,可离线复查元素为什么没找到;
- 最近网络请求:默认 30 条,快速确认接口是否 403/500;
- 最近 trace 记录:失败前最后几条操作,直接看到"最后发生了什么"。
如果指定了snapshot_dir,截图和 DOM 会落盘到该目录,文件名带时间戳,方便按次归档。
💡 典型排查思路:先看
summary()中的 Screenshot/DOM 路径确认现场 → 用recent_requests排除接口问题 → 用 trace 记录回放最后几步操作。三步定位,基本能覆盖绝大多数网页链路问题。
敏感信息自动脱敏,日志可放心分享
Trace 与快照在记录前会自动清洗数据(清洗逻辑见 tracer.py 中的_scrub_dict):
password、cookie、authorization、token等敏感字段被替换为***;- 超长字符串自动截断,列表最多保留 10 项。
这意味着你可以直接把dump_json()的产物贴给同事、AI 助手或写进报告,不用担心泄露凭据。
实战演示与延伸阅读
想完整体验 Trace 与失败快照的全部 API(含触发 ElementNotFoundError / JavaScriptError 等真实异常场景),直接运行官方演示脚本 examples/47_trace_and_diagnostics.py。单元测试覆盖了缓冲区的线程安全与序列化细节,可参考 tests/features/test_tracer.py。
配置速查(settings.py):
| 配置项 | 默认值 | 说明 |
|---|---|---|
trace_enabled | False | 是否记录 Trace 时间线 |
trace_max_entries | 1000 | trace 环形缓冲区最大条目 |
failure_snapshot_enabled | False | 失败时是否自动抓快照 |
snapshot_dom_max_bytes | 2MB | DOM 快照截断阈值 |
snapshot_recent_requests | 30 | 快照包含的最近请求数 |
小结
🚀 只需一行launch(trace=True, failure_snapshot=True),ruyiPage 就能把"网页链路黑盒"变成可回放、可导出、可分享的时间线;失败时自动留存的截图 + DOM + 网络记录 + trace 组合,让元素丢失、接口异常、加载超时等问题都有据可查。无论是人工排查还是交给 AI 自我调试,Trace 日志都是你排查一切网页链路问题的第一现场。
【免费下载链接】ruyipage
下一代Python的web自动化过检测框架,AI自我调试运行,trace日志可分析一切网页链路,通过一切网站检测的Firefox指纹浏览器。RuyiPage is a Python-based Firefox automation framework built on the next-generation WebDriver BiDi protocol.
相关推荐
Blender动画GIF制作终极指南:Bligify插件从零到专业
Blender动画GIF制作终极指南:Bligify插件从零到专业 你是否在寻找一个能够将Blender 3D动画无缝转换为社交媒体友好GIF格式的解决方案?B
e2e 调试指南:读懂失败 trace 页、report.json 与完整错误码对照
e2e 调试指南:读懂失败 trace 页、report.json 与完整错误码对照 本篇指南基于 e2e 仓库的技能参考文档 debugging.md htt
测试测试智能体人工智能浏览器控制CLIZelda64Recomp启动失败日志分析:如何解读crash.dmp文件定位问题
Zelda64Recomp启动失败日志分析:如何解读crash.dmp文件定位问题 引言:你还在为启动崩溃困扰吗? Zelda64Recomp作为基于N64游戏
游戏开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考