面向个人作者的本地 Chrome 扩展:导入 .txt / .md 文件夹或 ZIP,
解析章节、预览排期并按顺序填写番茄小说作者后台。支持草稿模式、试填模式、
进度追踪、失败恢复和 CSV 报告。
本项目不是番茄小说官方产品。使用者必须遵守平台协议、内容规范和发布限制, 并对最终提交负责。遇到验证码、安全验证或登录异常时,扩展会暂停并交还给用户, 不提供绕过平台控制的能力。
popup (选文件夹/勾选/开始)
│ chrome.storage.local + sendMessage
▼
background.js ← 消息总线 + 开/关标签页 + 通知
│ OPEN_PUBLISH_TAB / FILL_CHAPTER ▲ TASK_DONE
▼ │
content/publisher.js (发布页) ──TASK_DONE──▶ content/uploader.js (章节管理页)
填标题/正文/发布/处理弹窗 找入口 + 串行调度
- popup/ — 选本地文件夹,解析
.txt/.md为章节任务,勾选/编辑/预览排期后启动上传;记住上次设置。 - background.js — 后台 Service Worker,负责开发布标签页、转发完成/失败/停止信号、关标签页、桌面通知。
- content/uploader.js — 注入"章节管理页",按顺序逐章触发发布(串行、便于逐章确认)+ 同步去重 + 看门狗 + 防重复 + 停止。
- content/publisher.js — 注入"发布页",把章节号/标题/正文填进编辑器、处理各种弹窗并点发布(选择器集中在顶部
SEL)。 - sidepanel/ — 实时进度面板:每章状态、进度条、停止、重发失败章、导出 CSV 报告。
- 从 Releases 下载最新 ZIP 并解压,或克隆本仓库。
- 打开
chrome://extensions,启用「开发者模式」。 - 点「加载已解压的扩展程序」,选择解压后的文件夹。
- 点扩展图标 → 选择章节文件夹或 ZIP → 勾选章节 → 先用试填模式验证一章。
- 确认标题、正文与排期无误后,再由你启动草稿或发布流程。
- 一个
.txt/.md= 一章;文件名建议含章节号(如第1章.txt、001.md) - 两种导入:选文件夹,或一键导入 ZIP(自动解压包内
.txt/.md,一文件一章;零依赖手写解析 + 浏览器原生解压,加密/zip64 会明确提示不支持) - 编码自动识别:UTF-8 优先,自动兼容 GBK/GB2312 与 UTF-16(含 BOM)——旧编辑器/记事本导出的 GBK 稿不再乱码(仅用浏览器原生解码,零依赖)
- 章节号解析顺序:文件名 → 正文首部
第N章;支持中文数字(第二十章、第一百零五章), 标题里的第N章前缀会自动剥掉(章节号有独立输入框,不会重复) - 标题:首个非空行(≤40 字)优先,否则用文件名
- 正文:标题行之后的内容(避免标题在正文里重复)
- Markdown 标记(
#标题、**加粗**、*斜体*、>引用、行内代码)会被自动清理为纯文本
- 本工具靠模拟网页操作实现,番茄前端改版(DOM 结构变化)后,
content/publisher.js与content/uploader.js里的 CSS 选择器需要对照实际页面调整。- 💡 怀疑改版导致失效时,点 popup 底部 「🩺 选择器自检」:会打开一个发布页(只加载、不建章),
逐组检测
SEL选择器是否命中,核心选择器失效会标红并指出是哪一个,省去翻日志定位。
- 💡 怀疑改版导致失效时,点 popup 底部 「🩺 选择器自检」:会打开一个发布页(只加载、不建章),
逐组检测
- 番茄使用 React + Arco Design + ProseMirror。代码中已处理"受控组件需派发 input 事件"
和"富文本按段落塞
<p>"两个关键点,但具体类名以番茄当前页面为准。 - 仅供学习与个人合规使用;请遵守番茄小说的用户协议与平台规则。
popup 勾选「📝 仅存草稿」后,逐章只填表 + 点「下一步」创建章节记录,到发布弹窗时取消发布, 章节会以未发布草稿留在番茄章节管理页,方便先囤稿、之后再统一发布。此模式忽略发布模式与排期。
⚠️ 番茄编辑器是单一自动保存缓冲(逐章会互相覆盖),只有点过「下一步」才会创建独立章节记录, 因此存草稿借助「下一步 → 取消发布」实现;会消耗一次内容检测额度。首次使用建议先用 1 章验证 草稿是否如预期保留(番茄弹窗结构若调整,可能需要对照更新publisher.js的saveAsDraft)。
popup 里可选三种模式:
- ⚡ 立即发布 — 审核通过即发。
- 🤖 定时(每日 N 章·平均分配) — 每天 N 章,当天内从「起始时刻」起按
24/N小时均分; 日期从「起始日期」起逐日递增。- 起始日期支持三种:自动接续已排期(读章节管理页里已排期的最晚日期,从次日开始,不撞车;已排期都在过去时兜底到明天,绝不把定时排到过去被番茄拒收)/ 指定日期 / 明天
- 例:N=2、06:00 起 → 06:00、18:00、次日 06:00、次日 18:00……;N=3 → 06:00、14:00、22:00……
- ⏰ 自定义起始时间 — 指定首章发布时间,后续每小时一章。
定时时间由 uploader.js 的 computePublishTime() 计算,publisher.js 在番茄的
发布设置对话框里模拟点击日历/时间面板选择日期与时间(直接写值对 Arco 组件无效)。
发布设置会按书分别记住:popup 从当前番茄作者标签页识别 bookId,标题栏右上角显示
「📕 本书专属 · #ID」时,所有设置只对这本书生效;切到另一本书会自动加载那本书的设置。
未在番茄『章节管理』页打开书时显示「全局设置」,沿用上次配置(向后兼容)。
⚠️ 多本书的配置相互独立,但批次不能并行:上传会话是全局单例,同时给两本书 开批次会互相覆盖。请一本发完(或停止)再发下一本。
| 设置 | 说明 |
|---|---|
| 发布模式 | 立即 / 智能定时 / 自定义 |
| 每日章数 · 起始时刻 · 起始日期 | 智能定时的排期参数 |
| 操作节奏 | 正常 / 慢一点 / 很慢(统一放慢所有延迟,更稳) |
| 输入与操作间隔抖动 | 在逐字输入和页面操作之间加入可配置间隔 |
| 章节间隔随机 | 每章之间在 [最短,最长] 秒区间内随机等待 |
| 发布时间随机偏移 | 定时时刻 ±N 分钟随机,破整点规律 |
| 本次最多发 X 章 | 到量自动停(0=不限),便于分批复核 |
| 字数偏短提醒 | 正文少于阈值的章节在列表里标红(0=关),发前发现解析出错/残章 |
| 🚫 敏感词预检 | 命中自定义词库的章节标 🚫 并列出命中词;词库本地可编辑、对所有书生效 |
| 全面检测 / AI 声明 | 发布弹窗里的选项,自动选好 |
| 📝 仅存草稿 | 逐章点「下一步」建章后取消发布,章节以草稿留在后台(不发布、不排期) |
| 🧪 试填模式 | 只填表不发布,用于安全联调(不记忆,默认关) |
- 同步去重:进章节管理页优先调番茄「章节列表」接口拉【全量·跨分页】已创建章节,已发的章自动跳过;接口不可用时回退 DOM 抓当前页
- 防重复:点过"下一步"(章节已创建)后失败不重试;空内容在建章前中止
- 看门狗:单章 5 分钟无响应自动按失败处理,绝不永久卡死
- 风险检测等待:番茄"正在检测风险内容"阶段冻结超时、耐心等待
- 多信号判成功 + 超时兜底;失败自愈重点"确认发布"
- 停止:浮标 / popup / 进度面板均可随时停,提交前响应零副作用
- 断点续传:重进页面提示继续未发章节
- 重发失败 + 导出报告:进度面板一键补发、导出 CSV 对账
- 选文件夹(
.txt/.md)/ 解析章节 / 勾选 / 预览 / 编辑 - 串行批量发布 + 三种发布模式 + 排期预览
- 同步去重 / 防重复 / 看门狗 / 失败重试 / 停止 / 断点续传 / 重发失败
- 操作节奏与人工控制:间隔抖动 + 章节间隔 + 时间偏移 + 发布量上限 + 安全验证暂停
- 进度面板(sidePanel)+ 桌面通知 + CSV 报告 + 暗色模式
- 设置持久化 / 选择器集中(
SEL)/ 扩展图标
- 多分页同步(已用番茄「章节列表」接口实现全量·跨分页同步,DOM 抓取作回退)
- 敏感词预检(本地自定义词库,发布前扫描标记命中章节;词库由用户提供)
- 多本书独立配置(按 bookId 区分设置,定位不到书时退回全局)
- publisher.js 重构:拆分
submitAndConfirm/waitForPublishResult巨型轮询函数 (需配合真实番茄页面验证,勿盲拆;TIMINGS 常量与选择器集中已完成,点击工具已有realClick)
