Files
dww11-account-switch-browse…/README.md
T
2026-10-31 14:43:15 +08:00

84 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 广谈大湾网 · 随机换号扩展 3.0.4
将提供的 `dww11-acc-switch.user.js` 重写为 Chrome / Edge Manifest V3 扩展。无需运行本机服务,无需持续授权本地文件,也无需安装 npm 依赖。
## 安装
1. 解压 `dww11-extension-3.0.4.zip` 到一个固定目录,保留整个 `dww11-extension` 文件夹。
2. Chrome 打开 `chrome://extensions`;Edge 打开 `edge://extensions`。
3. 开启「开发者模式」,选择「加载已解压的扩展程序」,选中**包含 manifest.json 的 dww11-extension 文件夹**。
4. 停用原来的油猴脚本,避免两个程序同时换号。
5. 点击扩展图标打开管理页,选择 CSV、检查预览并点击「确认导入 IndexedDB」。也可在扩展详情页打开「扩展程序选项」。
6. 打开或刷新 <https://www.dww11.com/> 或 <https://house.dww11.com/>。在顶栏「欢迎您的登录!」左侧点击「登陆下一帐号」;未登录时按钮位于「立即登录」左侧。没有顶栏的子页会在卡片内保留该按钮。
卡片右上角可点击「隐藏卡片」,顶栏的「显示换号卡片」可以重新打开。显示状态保存在扩展 IndexedDB,刷新或重启后保留;没有顶栏的页面会提供一个小的「显示换号卡片」入口。隐藏卡片不会暂停换号或改变抽取进度。
主站与房产站共用同一份扩展账号库、轮次、已抽记录和卡片显示偏好。允许这两个 HTTPS 域名之间的登录、退出跳转,跳转后继续同一流程;仍兼容原来的裸域名入口。不会放开任意子域名或外部网站。登录结果通过当前页面同源首页核对,不假定两个站点必然共享登录 Cookie。
需要 Chrome / Edge 120 或更新版本。当前交付不包含 Firefox / Safari 版本。ZIP 用于解压安装,不能直接拖动 ZIP 作为已签名扩展安装。
**以后更新:在原目录覆盖代码后,到扩展管理页点击重新加载,再刷新网站。请保持安装目录不变,不要卸载重装。** 不同安装路径可能产生不同扩展 ID,导致旧 IndexedDB 无法被新安装读取。
## CSV 格式
```csv
username,password
my_account_01,my_password_01
my_account_02,"password,with,commas"
my_account_03,"password with ""quotes"""
```
- 必须包含一行表头。支持 `username,password`;账号列也支持 `account`、`账号`、`帐号`、`用户名`,密码列支持 `密码`。额外列会忽略。
- 支持 UTF-8、UTF-8 BOM,以及管理页手动选择的 GB18030 / GBK。默认 UTF-8;编码错误会阻止导入。
- 支持 CRLF / LF、引号内逗号、双引号转义和引号内换行。分隔符固定为英文逗号,不是分号或制表符。
- 用户名两端空格会去除;密码中的空格、换行和前导零原样保留。请用纯文本方式保存原始凭据,Excel 如果提前把 `00123` 转成 `123`,扩展无法还原。
- 文件最大 20 MiB。重复用户名、空账号、空密码、列数或引号错误会阻止整批导入,不会留下部分数据。
- 同名账号只更新密码,保留账号状态、时间、错误及本轮抽取记录。新账号加入本轮剩余池;在同一天也不会重新抽到已经使用过的账号。
- 存在未完成流程时禁止导入。先继续完成流程,或在管理页点击「结束未完成流程,保留抽取记录」。
- 模板中的示例不是可登录账号,请替换为你自己的账号后导入。
## 随机、轮次和跨天规则
1. **日期按电脑本地时区计算**,格式为 `YYYY-MM-DD`,不使用 UTC 日期。
2. 使用固定版本的伪随机算法和 Fisher–Yates 洗牌。种子包含「本地日期+轮次」;先按用户名进行固定排序,不依赖数据库 ID 或 CSV 行顺序。
3. **账号集合、日期、轮次相同,生成的顺序相同**。同一天进入下一轮会用新的轮次重新洗牌;这不保证相邻两轮的边界账号必然不同,小账号池可能产生相同排列。
4. **抽出即记为已用**:账号预留、已抽集合和登录阶段在同一个 IndexedDB 写事务里提交后,才返回给网站脚本。密码错误、暂停、关闭页面、手动结束流程都不会把账号退回本轮。
5. 本轮所有**非 invalid 的账号**抽完后,下一次需要抽号时自动增加轮次,清空已抽集合,再按当天日期洗牌。只剩一个可用账号时,每一轮只能抽到它;全部失效时暂停并提示,不会无限重试。
6. **跨天不强制开始新一轮**。保留本轮已抽集合,用新日期重排剩余账号,因此跨天也不在同一轮重复。中途导入新账号、账号失效或手动恢复,会改变剩余池及其排列;历史抽取记录保留。
7. 「本轮剩余」为仍可抽取的非失效账号数;「已抽」包括本轮抽出后被标记失效、未完成或手动结束的账号。
固定顺序是可复现的伪随机顺序,不用于密码学。独立洗牌也可能偶然出现数据库排序或与前一轮相同的顺序;不能为了排除这种可能而声称是真正均匀随机。
## 登录、暂停和恢复
- 换号流程:随机抽号 → 退出旧账号 → 打开登录表单 → 填写并提交 → 核对实际用户名 → 保存结果并结束。登录成功后按钮立即恢复,可再次点击「登陆下一帐号」。每次点击完成一次成功登录;不会在成功后无休止地自动切换账号。
- 不再打开、等待或核对任何发布页面,也不要求存在「免费发布信息」入口。保存成功结果与释放流程占用在同一 IndexedDB 事务中完成,页面停留在网站登录后的自然位置。
- 更新时会自动清理旧版卡在 `publish` / `publishing` 阶段或已保存成功结果的残留流程,账号、轮次和已抽记录保留。覆盖原目录、重新加载扩展并刷新网站即可继续换号,无需在管理页手动结束旧发布流程。
- 账号密码错误会标记 `invalid` 并记录错误,然后继续抽号。明确的冻结、封禁、禁用提示也会记录为失效;仅检查站点提示容器和原脚本指定的密码安全页面,不扫描帖子正文。
- 验证码、安全验证、频率限制、网络异常或无法确认登录结果会暂停,保留账号状态及流程,不自动把账号判为失效。需要你在网页人工处理。
- 点击「暂停换号」保留本次账号;点击「继续未完成流程」继续同一账号,**不算再次抽取**。
- 如果上次已经记录为「提交登录」,恢复时先核对页面或首页的实际登录用户名,不自动重交密码。30 秒仍无法核对会暂停。确认需要重新提交时,手动点击「重试本次登录」并确认;仍然使用本次预留账号,不抽新账号。
- 由于数据库写入与网站请求无法组成一个事务,断电可能发生在写入「已提交」之后、实际点击之前。扩展选择保留本次账号并等待核对/人工重试,以避免自动重复提交。
- 浏览器重启、扩展更新、标签关闭后,账号池、日期、轮次、已抽记录和未完成流程仍保存在 IndexedDB。重新打开/刷新网站并点击「继续未完成流程」。不要依赖原标签的会话存储。
- 后台 Service Worker 正常休眠再唤醒无需手动恢复;它不使用内存变量保存关键进度。
- 同时只允许一个网站标签持有流程。另一个标签不能发起并行换号。旧页面或旧流程的异步操作会被拒绝。若原标签仍打开,请在原标签继续;若要改用其他标签,可先在管理页结束流程,再刷新网站开始下一账号。
- 管理页的「结束未完成流程」会放弃当前流程,但保留抽取记录。网站页面需要刷新以更新按钮。若刚好有请求已发送到网站,结束流程不能撤回网站已经收到的请求。
- 更新了失效账号的密码后,需点击该账号的「恢复待检测」才重新进入可用池;本轮已抽记录仍然保留。
## 数据与权限
- 数据保存在**扩展来源**的 IndexedDB,不放在网站 IndexedDB、网站 localStorage 或 sessionStorage 中。清除网站普通数据与清除扩展数据不是同一操作。
- 密码以明文保存在本地数据库中,不做无法保护本地攻击者的伪加密。管理页不显示密码,列表 API 不返回密码;只有进行登录时才把本次密码发送给隔离内容脚本并填入目标站点表单。
- 扩展没有外部服务、遥测、远程脚本或 CDN。登录时会访问目标网站,原站点及其登录脚本能读取填入的凭据。
- 站点权限仅 `https://www.dww11.com/*`、`https://house.dww11.com/*` 和兼容的 `https://dww11.com/*`;`unlimitedStorage` 用于本地持久存储,避免普通存储配额/逐出限制。没有读取任意网站、浏览记录、剪贴板或本地文件系统的权限。
- **卸载扩展、清除扩展数据、更换浏览器配置、切换安装路径/扩展 ID 可能丢失或隔离本地数据。** Chrome 和 Edge、普通和隐身配置不共享账号库。请妥善保存原 CSV 作为账号备份;CSV 不包含抽取进度。
- 本版本没有导出进度、删除账号或跨设备同步功能;正常更新代码不需要清空或重新导入数据库。
## 验证范围与源码
本目录为可直接加载的源码,无编译步骤。算法与 CSV 测试在交付项目的 `tests/core.test.mjs`;真实浏览器测试在 `tests/browser-integration.mjs`、`tests/browser-restart.mjs`,使用独立临时浏览器配置和虚拟账号。具体结果见 ZIP 旁的 `测试说明.md`。
真实浏览器中测试了 IndexedDB 事务、消息权限、CSV 导入、并发互斥、后台回收、完整浏览器退出重启和网站流程。网站登录流程使用本地拦截的模拟页面,**未使用真实账号验证 dww11.com 当前网站**。网站改版可能要求调整 DOM 选择器或错误识别规则;这些规则来源于用户提供的原脚本。
实现依据:[Chrome 内容脚本隔离](https://developer.chrome.com/docs/extensions/develop/concepts/content-scripts)、[扩展消息通信](https://developer.chrome.com/docs/extensions/develop/concepts/messaging)、[Service Worker 生命周期与持久化](https://developer.chrome.com/docs/extensions/develop/concepts/service-workers/lifecycle)。