Skip to content

Repository files navigation

番茄小说批量发布助手

CI MIT License

面向个人作者的本地 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 报告。

安装运行

  1. Releases 下载最新 ZIP 并解压,或克隆本仓库。
  2. 打开 chrome://extensions,启用「开发者模式」。
  3. 点「加载已解压的扩展程序」,选择解压后的文件夹。
  4. 点扩展图标 → 选择章节文件夹或 ZIP → 勾选章节 → 先用试填模式验证一章。
  5. 确认标题、正文与排期无误后,再由你启动草稿或发布流程。

章节文件约定

  • 一个 .txt / .md = 一章;文件名建议含章节号(如 第1章.txt001.md
  • 两种导入:选文件夹,或一键导入 ZIP(自动解压包内 .txt/.md,一文件一章;零依赖手写解析 + 浏览器原生解压,加密/zip64 会明确提示不支持)
  • 编码自动识别:UTF-8 优先,自动兼容 GBK/GB2312 与 UTF-16(含 BOM)——旧编辑器/记事本导出的 GBK 稿不再乱码(仅用浏览器原生解码,零依赖)
  • 章节号解析顺序:文件名 → 正文首部 第N章支持中文数字第二十章第一百零五章), 标题里的 第N章 前缀会自动剥掉(章节号有独立输入框,不会重复)
  • 标题:首个非空行(≤40 字)优先,否则用文件名
  • 正文:标题行之后的内容(避免标题在正文里重复)
  • Markdown 标记(# 标题、**加粗***斜体*> 引用、行内代码)会被自动清理为纯文本

⚠️ 重要说明

  • 本工具靠模拟网页操作实现,番茄前端改版(DOM 结构变化)后, content/publisher.jscontent/uploader.js 里的 CSS 选择器需要对照实际页面调整
    • 💡 怀疑改版导致失效时,点 popup 底部 「🩺 选择器自检」:会打开一个发布页(只加载、不建章), 逐组检测 SEL 选择器是否命中,核心选择器失效会标红并指出是哪一个,省去翻日志定位。
  • 番茄使用 React + Arco Design + ProseMirror。代码中已处理"受控组件需派发 input 事件" 和"富文本按段落塞 <p>"两个关键点,但具体类名以番茄当前页面为准。
  • 仅供学习与个人合规使用;请遵守番茄小说的用户协议与平台规则。

仅存草稿模式

popup 勾选「📝 仅存草稿」后,逐章只填表 + 点「下一步」创建章节记录,到发布弹窗时取消发布, 章节会以未发布草稿留在番茄章节管理页,方便先囤稿、之后再统一发布。此模式忽略发布模式与排期。

⚠️ 番茄编辑器是单一自动保存缓冲(逐章会互相覆盖),只有点过「下一步」才会创建独立章节记录, 因此存草稿借助「下一步 → 取消发布」实现;会消耗一次内容检测额度。首次使用建议先用 1 章验证 草稿是否如预期保留(番茄弹窗结构若调整,可能需要对照更新 publisher.jssaveAsDraft)。

发布模式

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.jscomputePublishTime() 计算,publisher.js 在番茄的 发布设置对话框里模拟点击日历/时间面板选择日期与时间(直接写值对 Arco 组件无效)。

多本书独立配置

发布设置会按书分别记住:popup 从当前番茄作者标签页识别 bookId,标题栏右上角显示 「📕 本书专属 · #ID」时,所有设置只对这本书生效;切到另一本书会自动加载那本书的设置。 未在番茄『章节管理』页打开书时显示「全局设置」,沿用上次配置(向后兼容)。

⚠️ 多本书的配置相互独立,但批次不能并行:上传会话是全局单例,同时给两本书 开批次会互相覆盖。请一本发完(或停止)再发下一本。

popup 设置项(都会被记住)

设置 说明
发布模式 立即 / 智能定时 / 自定义
每日章数 · 起始时刻 · 起始日期 智能定时的排期参数
操作节奏 正常 / 慢一点 / 很慢(统一放慢所有延迟,更稳)
输入与操作间隔抖动 在逐字输入和页面操作之间加入可配置间隔
章节间隔随机 每章之间在 [最短,最长] 秒区间内随机等待
发布时间随机偏移 定时时刻 ±N 分钟随机,破整点规律
本次最多发 X 章 到量自动停(0=不限),便于分批复核
字数偏短提醒 正文少于阈值的章节在列表里标红(0=关),发前发现解析出错/残章
🚫 敏感词预检 命中自定义词库的章节标 🚫 并列出命中词;词库本地可编辑、对所有书生效
全面检测 / AI 声明 发布弹窗里的选项,自动选好
📝 仅存草稿 逐章点「下一步」建章后取消发布,章节以草稿留在后台(不发布、不排期)
🧪 试填模式 只填表不发布,用于安全联调(不记忆,默认关)

稳定性与容错

  • 同步去重:进章节管理页优先调番茄「章节列表」接口拉【全量·跨分页】已创建章节,已发的章自动跳过;接口不可用时回退 DOM 抓当前页
  • 防重复:点过"下一步"(章节已创建)后失败不重试;空内容在建章前中止
  • 看门狗:单章 5 分钟无响应自动按失败处理,绝不永久卡死
  • 风险检测等待:番茄"正在检测风险内容"阶段冻结超时、耐心等待
  • 多信号判成功 + 超时兜底;失败自愈重点"确认发布"
  • 停止:浮标 / popup / 进度面板均可随时停,提交前响应零副作用
  • 断点续传:重进页面提示继续未发章节
  • 重发失败 + 导出报告:进度面板一键补发、导出 CSV 对账

已实现

  • 选文件夹(.txt/.md)/ 解析章节 / 勾选 / 预览 / 编辑
  • 串行批量发布 + 三种发布模式 + 排期预览
  • 同步去重 / 防重复 / 看门狗 / 失败重试 / 停止 / 断点续传 / 重发失败
  • 操作节奏与人工控制:间隔抖动 + 章节间隔 + 时间偏移 + 发布量上限 + 安全验证暂停
  • 进度面板(sidePanel)+ 桌面通知 + CSV 报告 + 暗色模式
  • 设置持久化 / 选择器集中(SEL)/ 扩展图标

待办 / 可扩展

  • 多分页同步(已用番茄「章节列表」接口实现全量·跨分页同步,DOM 抓取作回退)
  • 敏感词预检(本地自定义词库,发布前扫描标记命中章节;词库由用户提供)
  • 多本书独立配置(按 bookId 区分设置,定位不到书时退回全局)
  • publisher.js 重构:拆分 submitAndConfirm / waitForPublishResult 巨型轮询函数 (需配合真实番茄页面验证,勿盲拆;TIMINGS 常量与选择器集中已完成,点击工具已有 realClick

About

本地章节导入、排期预览、草稿试填与进度恢复的个人作者 Chrome 工具。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages