在贴吧页面上就地查询用户数据的油猴脚本:点任意用户名旁的 「查询」,看这个人的
资料 / 成分 / 关注的人 / 关注的吧 / 粉丝 / 发帖。
数据由脚本内置的 tieba.js SDK 直连 tiebac.baidu.com,不经过 eztb.org 或任何其他第三方服务;
全部只读,不碰 tbs、不执行任何写操作。
仓库:https://github.com/Dan12elion/tieba_extensions(国内镜像:https://gitee.com/d143/tieba_extensions)
维护者文档(架构、实测数据、踩过的坑、发布流程)见 HANDOFF.md。
-
在 Edge / Chrome 里装 Tampermonkey。
-
装脚本,二选一(都是同一个文件,油猴会识别
.user.js并弹安装框):渠道 链接 说明 GitHub(主仓库) https://raw.githubusercontent.com/Dan12elion/tieba_extensions/main/dist/tieba-eztb-toolbox.user.js 更新最及时 Gitee(国内镜像) https://gitee.com/d143/tieba_extensions/raw/main/dist/tieba-eztb-toolbox.user.js 打不开 GitHub 时用这个;镜像同步可能滞后一点 也可以打开仓库里的
dist/tieba-eztb-toolbox.user.js点下载按钮, 再在 Tampermonkey 面板里「添加新脚本」→ 用下载到的内容替换模板 → 保存。 -
首次使用点脚本菜单「eztb:设置 BDUSS / 运行参数」,按提示粘贴 BDUSS。
只需下载上面这一个文件;仓库其余内容是构建脚本、测试与文档,日常使用用不到。
从哪个链接装的,更新就从哪里来:脚本故意不写
@updateURL(Greasy Fork 的规则要求), 所以油猴是拿"你当初安装时用的那个地址"去轮询新版本的。装在 Gitee 那份上时, 如果镜像还没同步到最新版,就会晚一点收到更新;想第一时间拿到更新,用 GitHub 那条链接。
已经装了旧脚本
tieba-eztb-follow.user.js的话先卸载它——它的按钮已失效,还会与本脚本抢页面标记。脚本更新后要在油猴里覆盖安装,而不是删掉重装:设置存在脚本存储里, 删条目会连 BDUSS 与关键词规则一起清掉。
| 页签 | 数据来源 | 说明 |
|---|---|---|
| 资料 | getProfile |
基础资料、等级、吧龄、发帖数等 |
| 成分 | 关注的吧 + 主题帖 + 回复 | 按关键词规则标注这个人的"成分",命中的词在原文里高亮 |
| 关注的人 | getFollow |
返回的是用户,不是贴吧;每页 20 条,按需翻页 |
| 共同关注 | getFollow(双方) |
你和他都关注了谁。需要在设置里填一次你自己的贴吧号;只读,不会关注或取关任何人 |
| 关注的吧 | getLikeForum → 回退 getHiddenLikeForum |
带吧内等级 Lv.N;拿不到等级的可以点「查等级」 |
| 粉丝 | getFans |
|
| 发帖 | 自建请求(is_thread 双 feed) |
可选 分开(主题帖 / 回复 两个子页签各自翻页)或 合并(合成一个列表按时间倒序);每条标注主题 / 回复 / 楼中楼;顶部是按吧统计的占比饼图,下面可以只看某个吧、也可以按内容搜索 |
面板底部是 「刷新当前页签」:重新解析用户并重建当前页签,其它页签的内容保留。 打开面板时先显示哪个页签可以在设置里选(「打开面板时默认停在」,默认「资料」); 页面上的「成分」标记仍然直接打开「成分」页签,不受这项设置影响。
另外两件与界面有关的:
- 设置可以导入导出了:设置面板里有「导出到文本框 / 复制 / 从文本框导入」。 导出的内容不含 BDUSS,导入时也不会读取 BDUSS,所以把规则表发给别人是安全的; 换电脑或重装脚本之前建议先导出一份(卸载脚本会连规则一起清掉)。
- 深色模式:界面配色跟随系统的深色偏好(
prefers-color-scheme)自动切换。 注意这里跟的是系统设置,不是贴吧自己那个夜间模式开关——两者不一定同步。
-
按吧统计的饼图:统计他的发帖都发在哪些吧(条数与占比),最多画 5 个,其余合成「其它 N 个吧」; 下方「查看全部 N 个吧的占比」可以展开每个吧的条数与占比。 进页签时主题帖与回复两路 feed 各取一页,之后翻页也会跟着更新。
-
图上如果写着「「回复」的数据还在加载,下面的占比还不完整」,那是还没到齐——回复要按吧反查吧名, 冷启动会比主题帖晚几秒,到齐后提示自动消失;哪一路彻底没取到,图上会写明是哪一路。
-
图例里的「未知贴吧」表示那一行的吧名没解析出来,这类行照样计入总数与占比,不会被丢掉。
-
回复正文:回复与楼中楼会显示他回了什么(以前只有标题)。
-
楼层:发帖接口不带楼层号,所以每行有一个「查楼层」小按钮——点了才查(每行一个请求), 查到换成「N楼」,鼠标悬停能看到那一楼的正文;结果会缓存。
-
只看某个吧:饼图下面有一个下拉框,列的是他已经发过言的吧(带条数)。 选一个吧,主题帖与回复两个列表就只留下那个吧的行,旁边的提示会写"筛的是哪个吧、命中多少条"; 选回「全部吧」就恢复。饼图不受筛选影响,始终统计全部已加载的发帖。
-
分开 / 合并:默认「分开」——主题帖与回复各占一个列表、各自翻页。 点「合并」把它们合成一个列表,按时间倒序排;点「加载更多」时两路各取下一页。 两条 feed 的页码本来是独立的,所以跨 feed 的时间顺序是近似的(同一条 feed 内部严格按时间)。
-
按内容搜索:工具条右边的搜索框在发帖与回复里找,标题或正文包含搜索词的行才会留下。 打字时只筛已经加载出来的那部分(不发请求);按回车或点 「搜全部」, 脚本会把两路还没加载的页逐页取回来(走同一套限速间隔),再给出结论: 「搜索「X」:已翻完主题帖 3 页、回复 2 页,共 181 条,命中 4 条(主题帖 4 · 回复 0)。」 翻页途中按钮变成「停止」,点它就不再往下翻、保留已经取到的。
页数上限就是设置里的「单个列表最多加载页数」(两路各算)。到上限停下时结论会写明 「仍有更早的没加载」;一条都没命中时说的是「已加载的 N 条里没有命中」——都不是"他没发过"。
对方隐藏发帖记录时拿不到内容。 贴吧允许把发帖记录设为私密,这时两路 feed 都只返回空列表 (实测 108 个用户里 15 个如此)。脚本没有绕过的办法,但会把这一路直接标成「发帖信息设为私密」, 而不是含糊地说"没有公开的主题帖"。
已知限制:吧内等级只能按用户名查询,而且只覆盖一部分吧。隐藏了关注贴吧的用户, 脚本只能从资料接口恢复出吧名;如果对方连用户名都没有(页面显示「贴吧用户_xxxx」), 那他的吧内等级一个都拿不到——面板会写明"该用户没有设置用户名,吧内等级无法查询"。
补救办法:没等级的行右边有「查等级」按钮,点了才去他在这个吧的帖子里读 (帖子接口的
userList带着每个人在该吧的等级)。读到就缓存,读不到会说明原因。
**「检测签到号」**点了才取数(主题帖与回复各一页),按吧统计他最近在哪儿发言, 标出「吧内等级 ≥ 门槛、最近这批帖子里该吧 0 条发言」的吧,并给每行补「近期发言 N 条」。 结论里会写明判定条件与样本大小——样本只有最近一页,不能理解成"他从来不发言"; 门槛在设置里(默认 6)。请求成本:回复数据不含吧名(只有 ID),第一次点通常是十几个请求, 之后吧名进缓存就只剩 2 个;所有请求都受限速约束(见「关键设计」)。
- 请求会自动重试:只有网络类错误(连不上 / 超时)才重试,最多 3 次尝试、退避 700ms → 1400ms; 贴吧返回的业务错误码不重试(服务端已经明确答复了,重试只是白花一次请求)。
- 连续失败会熔断:连续 5 次最终失败就暂停请求 30 秒,这期间的查询会直接告诉你 「已暂停请求,约 N 秒后自动恢复」,而不是让人对着转圈等。菜单「eztb:诊断当前页面」里有 「重置熔断」。
- 错误码会翻成人话:以前界面上可能出现
Tieba API error 300000:。现在已实测过的码给出说明, 没见过的码原样显示并标注「未收录」,同时记进诊断报告(报告里有「贴吧返回过但本脚本还没收录的错误码」一节)。 错误码的含义是外部事实,脚本不猜——收录表里每一条都写明出处。 - 「没有命中」和「数据没拿到」分开说:对方设了隐私、或取数失败时,用户名旁会出现一个灰色的 **「证据不足」**标记,点开能看到缺的是什么;不会把这种情况显示成"这个人很干净"。
- 页面内换页(软导航)后会重置标记:以前页面复用的旧节点会留着上一个用户的按钮。
- 校验 BDUSS:点一下会问贴吧「当前是谁」,给出结论 + 校验时间。若脚本管理器不允许脚本设置 Cookie 头,它会如实说「无法确认」(并说明当前浏览器登录的是谁),而不是假装通过。
- 我自己的贴吧号(「共同关注」用):不填时那个页签只会提示你来这里填,不会显示成 0 个共同关注。
- 成分检测每路翻几页:默认 1 页(每页 60 条)。调大能看到更早的帖子,代价是每个用户多 (页数−1)×2 个请求;某一页取到 0 条会提前停下。
- 记住上次看过的页签:开着时下次打开面板停在你上次实际看过的那个页签(覆盖「默认打开页签」)。
- 规则表旁边实时提示哪一行有问题(带行号):例如「只有名称没有条件,被忽略」「与第 N 行同名, 只保留第一条」「这个关键词带空格,脚本不按空格切分」。格式说明见 docs/rules.md。
参考 B 站"成分检测器":配好规则后,脚本在后台逐个检查页面上出现的用户, 命中就在用户名旁挂一个彩色标记,点标记直接看命中了哪条规则、命中了什么。
规则在设置面板里逐行写:
# 以 # 开头是注释
🎮原神 | 原神,芙宁娜,米哈游 | 原神吧,米哈游吧 | 原神怎么你了
🎁抽奖 | 互动抽奖,转发本条动态
⚠️某个名单 | | | | 1234567890
🛒带货 | | | | | 拼多多,淘宝
字段是 名称 | 发帖关键词 | 关注的吧关键词 | 排除关键词 | 直接命中名单 | 发帖所在吧关键词,
后四段可省略,关键词用逗号分隔(不按空格切,参考脚本里就有「互动抽奖 #原神」这种带空格的词)。
- 发帖关键词打在主题帖与回复的「标题 + 正文摘要」上(各取第 1 页,每页 60 条); 吧关键词打在关注的吧名上。
- 隐藏了关注贴吧的用户也算数:主接口拿不到时,脚本会从资料接口自带的「关注贴吧」字段与 等级分组里恢复一部分吧名参与判定;面板会写明"其中 N 个来自隐藏关注贴吧的恢复"。 恢复出的列表可能不完整,这是贴吧自身的限制。
- 最后一段「发帖所在吧关键词」打在他实际发过帖的吧名上——与"关注了哪些吧"是两回事 (很多人关注一堆吧却不说话)。这一段是新加的,所以放在最后,老规则(5 段)不用改。
- 排除关键词命中就整条不算,用来压住"只是玩梗/讨论"这类误伤。
- 匹配方式可选(1.11.0):默认是包含匹配;设置里可以全局切成完全匹配,
也可以只给个别词加前缀:写成
=V就表示这一个词要完全匹配。- 吧名上的完全匹配 = 整个吧名相等(
=V命中「V」「V吧」,不命中「zerosievert吧」「V圈吧」); - 正文上的完全匹配 = 英文 / 数字词要独立成词(
=V命中「V圈」「玩V的」, 不命中zerosievert、V_1、1V2);中文没有词边界,所以中文词两种方式等价。 - 短词(
V、ml、r)建议一律写=:它们用包含匹配会撞进无关的吧名与正文里 (实测:V命中了「zerosievert吧」)。规则表下面的校验提示会主动把这种写法点出来。
- 吧名上的完全匹配 = 整个吧名相等(
- 证据分强弱:名单、关注的吧、主题帖算强证据;回复与楼中楼只算弱证据, 界面会标"证据较弱,可能是误判",标记也淡一些。
- 同一用户同一条规则命中多处会合并成一个标记,不会重复刷屏。
「成分」页签里看到的(1.10.0 起):
- 按时间倒序:命中的规则之间按各自最新的依据排(最近有依据的在前),规则内部的证据也按时间倒序; 规则右上角写着「最近依据 2026-09-28 14:03」这样的时间。名单与关注的吧是"状态"不是"事件", 没有时间,排在带时间的后面。
- 每条证据标出类型(主题帖 / 回复 / 楼中楼),并带上时间、吧名;楼中楼还会写「回复 谁」。
- 可以跳过去看:证据行有「打开主题帖」/「打开这一楼」——回复与楼中楼用
?pid=精确跳到那一楼,在贴吧里新窗口打开。 - 回复与楼中楼能查楼层:行上有「查楼层」,点了才查(一条一次请求),查过会缓存, 下次直接显示「N楼」(发帖接口本身不带楼层号,原因见 HANDOFF.md §4.5)。
请求成本与开关:
- 规则表为空时一个请求都不发(默认状态,装上不会打扰任何人)。
- 每个用户最多 3 个请求(关注的吧 + 主题帖 + 回复);设置里可限制每页最多检测多少人(默认 20), 超出的不再排队;同一用户在缓存有效期内只查一次(默认 3 天,改规则会让缓存自动失效)。
- 请求受那条串行限速队列约束,与手动查询共用同一个间隔设置(吧名反查是唯一的例外,见下)。
脚本菜单里还有:「eztb:清空成分缓存」、「eztb:重新检测本页用户」, 以及 「eztb:诊断当前页面」(列出 URL、各扫描器选择器的命中数、已注入按钮数、 页面上用户主页链接的 class 统计、在飞请求数、存储写入失败记录与最近的日志; 面板里另有「中断在飞请求」按钮——遇到「某类页面不出按钮」时把这个报告发出来即可定位)。
还有 「eztb:中断当前所有在飞请求」:请求失控(比如误设了很小的间隔、正在批量检测) 时可以一键停下,不用关页面。
术语对照(容易搞错,已踩过坑):上游网页的
/follow是「关注列表 / 共关注 N 人」,对应getFollow; 「关注的吧」是/likeforum,对应getLikeForum。两者不是同一个接口。
细节与踩坑记录在 HANDOFF.md 的 §3 与 §5,这里只列最容易被"顺手改回去"的几条:
- 不经过任何第三方服务:SDK 编译进单文件,所有请求只打
tiebac.baidu.com,协议统一升级为 HTTPS。 - 串行限速:请求经
SerialQueue排队,默认间隔 400ms,分页由脚本逐页驱动, 不用 SDK 内部的并发ALL拉取。唯一例外是「按吧反查吧名」(回复接口只给 ID):它最多 3 个并发、 间隔取"你设的间隔 ÷ 3"与 150ms 的较大者(默认约 6 个/秒,设置调大时自动放宽)。 - 凭据本地化:BDUSS 只存在油猴存储里,不上传任何地方。
- 按钮必须
pointer-events:auto !important:新版贴吧把操作按钮放在.btn-wrapper里, 该容器常态是pointer-events:none,不覆盖就会「看得见、点不动」。 - 按钮的 z-index 只能是 5:抬 z-index 会让它盖住本该盖住它的页面弹层。
- 点击走 document 捕获阶段的事件委托:页面在冒泡阶段可能吞掉点击。
- 列表行的标题/副标题必须是块级:
overflow:hidden+text-overflow:ellipsis对 inline 元素无效。 - 每个页签(以及「发帖」下的两个子页签)各自一个容器,切换只切显隐; 共用容器 + "已初始化"集合会导致切回被提前 return、异步回调覆盖当前内容。
- 成分标记容器必须
nowrap:新版头部行高度写死 40px,标记折行会压住正文。 - 主题帖与回复是两个 feed(
is_thread切换)、楼层号要额外查一次、 手动构造 protobuf 必须走fromPartial—— 原因都在 HANDOFF 的 §4。
- BDUSS 等同于账号登录凭据,请勿分享或粘贴到不可信的网站。
- 请保持默认的请求间隔,不要用它做批量抓取或任何自动化写操作。
- 许可见 LICENSE(本工程自己的代码,MIT)与 THIRD-PARTY.md(内嵌的第三方代码)。
- 内嵌的
packages/sdk是上游仓库里的 git submodule,指向 Dilettante258/tieba.js;它的package.json声明license: ISC(v3分支当前是 3.1.3)。版本与提交号锁在sdk.lock.json里, 构建时会和磁盘上的实际值核对,对不上会直接停下来。 上游仓库暂时没有LICENSE文件,产物末尾的 NOTICE 里按 ISC 模板补了一份许可文本。 - 另外内嵌三个许可明确的库:effect(MIT)、@bufbuild/protobuf(Apache-2.0 AND BSD-3-Clause)、long(Apache-2.0)。
基线脚本(早期那个点按钮后用 iframe 内嵌 https://www.eztb.org/follow 的版本)不在本仓库里。
本工程保留它验证过的部分(新旧版 DOM 适配、UID 解析、按钮注入、缓存策略),把数据来源换成脚本内置的 SDK——
不再让别人的服务器每点一次就交付一整套前端资源。
已按它的规则逐条核对(code-rules、
meta-keys),并写成了 verify.mjs 的
V7 · Greasy Fork 发布要求 一组断言:
| 要求 | 本工程的做法 |
|---|---|
| 不得混淆或压缩,要保留空白与变量名 | 默认构建就是未压缩可读版(约 2.9 万行,最长行不到 2000 字符) |
| 脚本 ≤ 2.0 MB | 约 1.0 MB |
@name、@description 必填 |
都有,且各带一份 :zh-CN 语言标记 |
至少一个 @match/@include,且只匹配自己提供功能的站点 |
两个 *://…tieba.baidu.com/* |
@license 用 SPDX 标识符 |
MIT |
| 内嵌的库必须写明来源、名称与版本 | 产物末尾 NOTICE 逐条列出(tieba.js SDK / effect / @bufbuild/protobuf / long) |
不要自己写 @updateURL / @downloadURL |
没写,交给 Greasy Fork 自动改写 |
| 主要功能必须在站内代码里实现 | 全部打包进单文件,不使用 @require 远程加载 |
上传前还需要你确认两件事:元数据里的标识是你自己的(fork 的话用 EZTB_NAMESPACE /
EZTB_AUTHOR 覆盖后重新构建;默认值指向本仓库),以及你确实有权分发 tieba.js SDK(见上面的合规提醒)。
为什么不用
@require加载库?SDK 有 4 个 Node 依赖(undici、node:crypto、node-html-parser、Buffer) 需要在构建时替换成浏览器实现,直接@require原版跑不起来。
.github/workflows/ci.yml 在每次 push / PR 上跑离线三项 + 产物同步校验:
typecheck → build → git diff --exit-code -- dist → verify → keyword-test。
本项目的产物是提交进仓库的(README 的 raw 链接指着它),所以这里校验的是
产物和源码一致——改了源码忘了重建会被直接拦住。
live-test / click-test / page-test 依赖真实接口与无头浏览器,放在同一个 workflow 的
workflow_dispatch 里手动触发,不进 PR 门禁。
这套 CI 已经在 GitHub 上跑过并通过(2026-09-28,
main@e3ef7ea的 push 触发): 从锁文件记的提交取上游 →bun install --frozen-lockfile→ 构建 →git diff --exit-code -- dist为空 →verify51 项 →keyword-test70 项,全绿。 最后那条同时证明了产物在 Linux runner 上能逐字节重建,不只是在本机成立。 需要装 bun 只是因为 esbuild / typescript / effect 都得从上游装出来——本机开发不需要它。
eztb-userscript/
├─ build.mjs # esbuild 打包 + 拼接油猴元数据
├─ tsconfig.json # 类型检查配置(paths 与 shims-plugin.mjs 的别名对齐)
├─ package.json # 版本号:产物元数据里的 @version 就是它
├─ sdk.lock.json # 内嵌 SDK 锁定的版本 / 许可 / 提交号(构建时核对)
├─ HANDOFF.md / PLAN.md # 交接文档 / 立项时的清单(历史)
├─ IMPROVEMENTS.md # 对标同类项目的改动建议与进度
├─ .github/workflows/ # CI(离线三项 + 产物同步校验)
├─ scripts/
│ ├─ shims-plugin.mjs # Node → 浏览器 的解析替换规则(打包与校验共用)
│ ├─ deps-info.mjs # 读内嵌依赖的版本 / 许可 / 提交号,生成产物 NOTICE
│ ├─ typecheck.mjs # tsc --noEmit(借上游的 typescript)
│ ├─ verify.mjs # MD5 签名逐字符比对 + 产物检查 + Greasy Fork 要求
│ ├─ keyword-test.mjs # 纯逻辑离线测试(规则 / 饼图 / 判定)
│ ├─ live-test.mjs # 真实接口链路测试
│ ├─ click-test.mjs # 无头浏览器 + 本地代理的交互测试
│ ├─ page-test.mjs # 真实页面快照回归
│ └─ fetch-sample-css.mjs / extract-mhtml.mjs / probe-user.mjs # 一次性排查工具
├─ src/
│ ├─ main.ts # 入口:注入样式、挂按钮、注册菜单
│ ├─ core/ # 设置、限速队列、缓存、身份解析、关注的吧、发帖、成分规则
│ ├─ shims/ # 4 个 Node 依赖的浏览器替身
│ ├─ page/ # 新旧版贴吧 DOM 适配、扫描、成分徽章
│ ├─ ui/ # 样式与通用弹窗
│ └─ features/ # 用户面板、设置面板、成分检测调度
└─ dist/
└─ tieba-eztb-toolbox.user.js
本工程刻意不重复安装依赖:esbuild、effect、@bufbuild/protobuf、long、typescript
都从上游 eztb 仓库的 node_modules 借。默认取同级的 ../eztb,可用 EZTB_ROOT 指向别处。
$env:EZTB_ROOT = "<上游 eztb 仓库的路径>" # 可选,默认 ../eztb
node build.mjs # 可读版(默认,约 1.0 MB)
node build.mjs --minify # 压缩版,另存 dist/tieba-eztb-toolbox.min.user.js(不要传 Greasy Fork)
node scripts/typecheck.mjs # 类型检查
node scripts/verify.mjs默认不压缩是有意为之:Greasy Fork 要求提交未压缩代码,油猴编辑器里也只有未压缩版能正常换行阅读。
构建时会读 packages/sdk/package.json 与 git rev-parse HEAD,和仓库里的
sdk.lock.json 比对,并把结果写进产物末尾的 NOTICE。对不上就直接停下,
提示你先确认上游改了什么、再更新锁文件——上游 v3 一动,产物就变了,
这条是唯一能证明"产物里内嵌的是哪一版"的东西。
元数据里与"你是谁"有关的部分可用环境变量覆盖,不用改代码:
| 环境变量 | 作用 | 默认 |
|---|---|---|
EZTB_NAME |
@name(同时生成 @name:zh-CN) |
贴吧 eztb 工具箱 |
EZTB_NAMESPACE |
@namespace,与 @name 一起构成脚本唯一标识 |
https://github.com/Dan12elion/tieba_extensions |
EZTB_AUTHOR |
@author,留空则不输出该行 |
Dan12elion |
EZTB_SUPPORT_URL |
@supportURL,留空则不输出该行 |
本仓库的 issues |
@namespace一旦发布就不要改,否则已安装的用户会被当成装了另一个脚本。
五套测试加一次类型检查与一次版本核对,都不需要 BDUSS:
| 命令 | 验证内容 |
|---|---|
node scripts/typecheck.mjs |
类型检查(tsc --noEmit)。别名解析、接口参数形状、字段确实存在——esbuild 只打包不检查,所以这条单列 |
node scripts/verify.mjs |
浏览器版 MD5 / packRequest 与 Node 版逐字符一致;产物无残留 Node 依赖、不含 eztb.org;内嵌依赖自检(SDK 与上游检出的版本/许可/提交号/版权署名都要对上 sdk.lock.json);Greasy Fork 的发布要求;源码卫生(没有绕过 core/log.ts 的 console.warn)(53 项) |
node scripts/version.mjs |
版本一致性:package.json、产物里的 @version、CHANGELOG.md 三处必须一致(没有 v<版本> tag 只提醒) |
node scripts/keyword-test.mjs |
成分规则解析与匹配、关键词的包含/完全匹配、排除词、证据强弱、高亮转义、证据的时间排序与跳转/楼层 HTML、发帖占比/饼图几何、签到号判定、贴吧错误码翻译、请求重试与熔断、共同关注交集、规则的按行报错、"证据不足"判定(185 项,纯离线) |
node scripts/live-test.mjs |
打真实贴吧接口:签名、protobuf、multipart、HTTPS 升级、翻页、真实数据跑关键词、隐藏关注贴吧的恢复、"点了才查"的等级与楼层(都与直接调接口交叉验证)、隐藏发帖的不变量、回复页吧名反查的缓存与去重、「校验 BDUSS」的判据、贴吧号 ↔ 内部 id 的对应关系、成分证据的时间与帖子 id(40 项) |
node scripts/click-test.mjs |
无头 Edge/Chrome:按钮注入、命中测试(elementFromPoint)、面板渲染、子页签独立翻页、成分标记、「查等级」/「检测签到号」、菜单命令、诊断面板的开关与运行期自检、弹窗焦点陷阱、占比饼图、回复正文与「查楼层」、隐藏发帖说辞、软导航后重置标记、注入网络错误后的自动重试、「校验 BDUSS」的三种世界、「共同关注」的自洽验证、成分证据的类型/时间/跳转链接、关键词匹配方式设置项;再跑一遍深色模式(242 项) |
node scripts/page-test.mjs |
真实页面快照回归:按钮注入、新版头部行排版、按钮与正文不重叠(每份快照跑正常宽度与 420px 窄容器两遍)。项数取决于本机有几份快照,不是固定值 |
page-test 的快照放在仓库的
dist/.samples/(已 gitignore;同级的../test0也会找)。 找不到快照的用例会显示"跳过"并注明,不会假装通过。 只有 MHTML 快照会丢外部 CSS(它只存内联样式),那种快照要先跑node scripts/fetch-sample-css.mjs把样式抓下来,否则布局类断言会失真; 浏览器另存的「网页,完整」快照自带<标题>_files/,不需要这一步。
另外几个一次性工具:node scripts/probe-user.mjs <portrait/ID> [吧名] 打某个用户在四个接口下的原始返回
(回答"为什么这个字段拿不到"),node scripts/extract-mhtml.mjs <a.mhtml> 把 MHTML 解码成可加载的 HTML,
$env:EZTB_PROBE=1; node scripts/live-test.mjs 打印原始 feed 结构与 is_thread 对比。
尚未验证(需要真实浏览器 + 有效 BDUSS):带 BDUSS 的鉴权接口(关注吧 / 粉丝 / 发帖)、 真实贴吧页面上的按钮注入与自愈。这两条只能由使用者自己在浏览器里确认。
本仓库的代码、测试与文档由作者 Dan12elion 与 AI 助手协作完成(模型 DeepSeek, 工具 Codex 桌面版在本机执行构建与测试)。AI 是协作工具而不是作者:每一步改动都由作者确认后才提交, LICENSE 里的版权人也只写作者本人,AI 生成的内容不单独主张版权。