From 1e3822fb253c1405480f2a8171434e59ac46b4ed Mon Sep 17 00:00:00 2001 From: OpenClaw Date: Sat, 18 Apr 2026 23:30:56 +0800 Subject: [PATCH] docs: update README with OpenClaw mod differences --- README.md | 106 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 83 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 40976e4..bb9a7ff 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,63 @@ -# GLM Coding 抢购助手 v4.6 +# GLM Coding 抢购助手 v4.6(OpenClaw Mod) 智谱 GLM Coding Plan 限时抢购自动化脚本(Tampermonkey 油猴脚本) +基于 [qtaxm/glm-rush](https://github.com/qtaxm/glm-rush) v4.6 修改 + +## vs 原版的差异 + +本版本在原版基础上增加了以下改进: + +| 修改 | 说明 | +|------|------| +| **A1 空单过滤** | check 返回金额为 0 视为空单,继续重试 | +| **A2 Vue 响应式保护** | patchSoldOut 跳过 `__ob__`/`__v_isVNode`/`__v_isRef` 防止崩溃 | +| **A3 提前触发** | 可配置提前 X 秒触发,补偿 RTT 网络延迟 | +| **A4 捡漏模式** | maxRetry 耗尽后自动降速(2路/3s间隔)等退票 | +| **A5 全局 soldOut 补丁** | 所有 fetch 响应的 JSON 中移除 isSoldOut/soldOut/isServerBusy/stock=0 | +| **B1 Promise.allSettled** | 并发取消不报 rejected,统一 settled 处理 | +| **B2 favicon.ico 时间同步** | 改用 favicon.ico HEAD 请求,采样 3 次取中位数 | +| **B3 预热策略** | 改用空 POST + favicon.ico,提前 5 分钟开始预热 | +| **B4 waitForBuyButton** | 按钮轮询最多 8 秒(每 200ms),支持 class/文本双策略 | +| **B5 stopAll abort** | 停止时主动 abort 所有进行中的 AbortController | +| **B6 getVueRoot** | Vue 2/3 兼容获取根实例辅助函数 | +| **B7 支付弹窗恢复重置** | 检测到支付弹窗时重置 recoveryAttempts | +| **C1 555 视为 EXPIRE** | code=555 系统繁忙加入立即重试列表,429 退避上限 8 秒 | +| **C2 连续售罄比例判断** | 60% 售罄即计数,非全量才计数 | +| **C3 rAF 精度提升** | 最后 1 秒切换 requestAnimationFrame,setInterval/rAF 互斥 | +| **C4 sessionStorage 版本校验** | 写入 `__v:1`,读取时校验版本,不一致则清除 | +| **C5 history 路由劫持** | pushState/replaceState 拦截,离开确认提示 | +| **C6 fakeXHR setProp** | try-catch + Object.defineProperty 双重保护属性赋值 | +| **D1 放票时间警告** | 面板显示「⚠️ 每次确认放票时间」提示 | +| **D2 dismissDialog Escape** | 弹窗关闭前优先发送 Escape 键盘事件 | +| **D3 getDelay 参数名** | 参数名从 `attempt` 改为 `round`(语义更准确) | +| **D4 VERSION 常量** | 统一 `const VERSION = '4.6'` 变量管理 | ## 功能特点 - **极速并发引擎** — 双模式并发:极速模式 10 路 + 普通模式 5 路,任一成功立即取消其余 - **自适应间隔** — 前 20 次零延迟爆发 → 30ms 快速重试 → 100ms 随机间隔,带 ±30% 抖动 -- **preview + check 双重校验** — 获取 bizId 后调用 check 确认有效,EXPIRE 立即重试 +- **preview + check 双重校验** — 获取 bizId 后调用 check 确认有效,EXPIRE/空单 立即重试 - **4 层支付恢复** — 暴力清弹窗 → 缓存重点击 → 直接获取支付链接 → 兜底提醒 - **反检测** — 请求指纹随机化(X-Request-Id / X-Timestamp / Accept-Language)、JSON.parse 定向拦截、fetch/XHR toString 伪装、Shadow DOM 面板隔离 -- **高精度定时** — requestAnimationFrame + performance.now,精度 ±2ms -- **配置持久化** — localStorage 保存所有配置,sessionStorage 保存捕获的请求,刷新不丢失 +- **高精度定时** — requestAnimationFrame + performance.now,精度 ±2ms,提前触发补偿 RTT +- **配置持久化** — localStorage 保存所有配置,sessionStorage 保存捕获的请求(带版本校验) - **弹窗自动恢复** — MutationObserver 监控弹窗,自动关闭并重新触发,最多 3 次 +- **捡漏模式** — 抢购失败后自动降速等待退票 +- **离开保护** — 路由跳转时确认是否中断抢购 - **快捷键** — `Alt+S` 开始 / `Alt+X` 停止 / `Alt+H` 隐藏面板 ## 安装 -### 方式 1:从 GitHub Raw 安装(推荐) +### 方式 1:从 Gitea Raw 安装(推荐) 1. 安装 [Tampermonkey](https://www.tampermonkey.net/) 浏览器扩展 -2. 点击安装:[glm-rush-v4.user.js](https://raw.githubusercontent.com/qtaxm/glm-rush/master/glm-rush-v4.user.js) +2. 点击安装:[glm-rush-v4.user.js](https://gitea.ephron.ren/OpenClaw/glm-rush/raw/branch/master/glm-rush-v4.user.js) 3. Tampermonkey 自动弹出安装页面,点击 **安装** -### 方式 2:手动安装 +### 方式 2:从 GitHub Raw 安装(原版) -1. 复制 `glm-rush-v4.user.js` 的内容 -2. 打开 Tampermonkey → 添加新脚本 → 粘贴 → 保存 +1. 安装 [Tampermonkey](https://www.tampermonkey.net/) 浏览器扩展 +2. 点击安装:[glm-rush-v4.user.js](https://raw.githubusercontent.com/qtaxm/glm-rush/master/glm-rush-v4.user.js)(原版) ## 使用方法 @@ -44,12 +76,13 @@ | 并发路数 | 5 | 普通模式同时发起的请求数 | | 极速并发 | 10 | 前 5 秒的高并发路数 | | 极速时长 | 5s | 高并发持续多久 | -| 最大重试 | 2000 | 达到上限后停止 | +| 最大重试 | 2000 | 达到上限后进入捡漏模式 | | 爆发次数 | 20 | 前 N 次零延迟 | | 快速间隔 | 30ms | 爆发后的重试间隔 | | 慢速间隔 | 100ms | 后期重试间隔中值 | | 抖动 | ±30% | 间隔随机化幅度 | | 抢购时间 | 10:00:00 | 每天定时触发时间 | +| 提前触发 | 2s | 开抢前提前 X 秒触发(补偿 RTT) | ## 快捷键 @@ -75,7 +108,7 @@ 任一获取 bizId ↓ check 校验 bizId - ├── EXPIRE → 立即重试 + ├── EXPIRE/空单 → 立即重试 └── 通过 → 成功! ↓ 4 层支付恢复 @@ -83,20 +116,49 @@ ├── 缓存响应 + 重点击购买 ├── 直接获取支付链接 └── 兜底提醒 + ↓ + 超过 maxRetry 且 < 5分钟 + ↓ + 捡漏模式(2路/3s间隔) ``` ## 更新日志 -### v4.6 (2026-04-10) +### v4.6-mod (2026-04-18) +基于 qtaxm/glm-rush v4.6,OpenClaw 新增修改: +- **A1** check 返回金额为 0 视为空单,继续重试 +- **A2** patchSoldOut 增加 Vue 响应式对象保护 +- **A3** 支持提前触发(补偿 RTT) +- **A4** maxRetry 耗尽后自动进入捡漏模式 +- **A5** 全局 fetch 响应 JSON soldOut/isServerBusy/stock=0 补丁 +- **B1** Promise.allSettled 统一处理并发取消 +- **B2** favicon.ico HEAD 时间同步,采样 3 次取中位数 +- **B3** 预热改空 POST,提前 5 分钟开始 +- **B4** waitForBuyButton 异步轮询(最多 8 秒) +- **B5** stopAll 主动 abort 所有 AbortController +- **B6** getVueRoot Vue 2/3 兼容辅助函数 +- **B7** 支付弹窗出现时重置 recoveryAttempts +- **C1** code=555 系统繁忙视为 EXPIRE 立即重试,429 退避上限 8 秒 +- **C2** 连续售罄改为比例判断(60% 即计数) +- **C3** rAF 精度提升,最后 1 秒切换 requestAnimationFrame +- **C4** sessionStorage 版本校验(__v:1) +- **C5** history 路由劫持,离开时确认 +- **C6** fakeXHR setProp 双重保护属性赋值 +- **D1** 面板增加放票时间警告提示 +- **D2** dismissDialog 优先发送 Escape 事件 +- **D3** getDelay 参数名语义修正 +- **D4** VERSION 常量统一版本管理 + +### v4.6 (2026-04-10) 原版 - **修复** 支付弹窗不弹出 — 根因: 前端 `payComponent.isServerBusy=true` 阻止 `payPreviewFn` 发请求 - **新增** `patchSoldOut` 增加 `isServerBusy` 拦截(JSON.parse 层) - **新增** `patchVueServerBusy` 兜底:定时扫描 Vue 组件树,直接 patch `isServerBusy=false` - **新增** `forcePayDialog` 兜底:抢购成功 1.5s 后若弹窗未出现,直接设置 Vue `payDialogVisible=true` -### v4.5 (2026-04-10) +### v4.5 (2026-04-10) 原版 - **修复** `findBuyButton` 找错按钮(匹配到"即刻订阅"导航按钮),优先找 `buy-btn` 类按钮 -### v4.4 (2026-04-09) +### v4.4 (2026-04-09) 原版 - **新增** 极速模式:前 5 秒 10 路并发,之后降为 5 路 - **新增** 请求指纹随机化(X-Request-Id / X-Timestamp / Accept-Language 权重随机) - **新增** 余额支付方式支持 @@ -105,7 +167,7 @@ - **优化** 爆发次数从 10 提升到 20,快速间隔从 50ms 降到 30ms - **优化** 连续售罄 / 限流智能退避 -### v4.1 (2026-04-08) +### v4.1 (2026-04-08) 原版 - **修复** 售罄状态下按钮不可点击的问题(恢复全局 JSON.parse patch) - **修复** 支付弹窗不弹出的问题(4 层恢复策略) - **修复** `@match` 规则不匹配 `bigmodel.cn`(无 www) @@ -115,7 +177,7 @@ - **修复** stats.errors 永远显示 0 - **修复** Alt+H 快捷键在 Shadow DOM 中失效 -### v4.0 (2026-04-08) +### v4.0 (2026-04-08) 原版 - 并发重试(Promise.race 变体) - 自适应间隔(爆发→快速→随机抖动) - 反检测(定向拦截、toString 伪装、Shadow DOM) @@ -124,12 +186,10 @@ - MutationObserver 弹窗监控 - 快捷键、离开保护 -### v3.2 (原版) -- 单线程串行重试 -- preview + check 双重校验 -- 错误弹窗自动恢复 -- 浮动控制面板 - ## License -MIT +MIT License + +## 致谢 + +- 原作者 [qtaxm/glm-rush](https://github.com/qtaxm/glm-rush)