Files

22 KiB

新闻下载、导入排版、人工发表与换号实施计划

本文中的帐号名称和用户编号已匿名化;真实记录保存在本地排除目录中。帖子编号仍用于说明既有受理证据,不代表当前公开状态。

更新日期:2026-10-31(北京时间)。本版整体替换早期自动发帖设想,依据当前源码、发布流程操作记录与自动化规范、演示任务记录和发布去重记录重新梳理。

原计划编写时仅进行了本地源码与记录核对,未重新操作线上页面、下载新闻、上传图片或发表帖子。下文“演示已验证”引用既有操作记录;“源码已有”不等于最新版本已在线上重新验收。

后续现场补录:2026-10-31 已采集一次真实提交提示与审核中详情页,见第 11 节。第 1~10 节保留原计划语境,组件当前能力以 README 和源码为准;本次补录不代表结果观察功能已经接通。

当前实现更新:0.2.0

2026-10-31 已在源码接通审核中结果观察、真实 TID/PID 分离、受理记账、返回首页与后续调度;新增发布后图文差异暂停、历史结果补核及换号异常暂停。当前操作以 README 与源码为准,下文第 1~10 节为早期实施计划,不能再把其“尚未实现”描述当作当前状态。

已根据本地现场记录为主题 236999 / 首帖 238791 补登记去重,关联既有提交快照,未增加当前账号批次计数。正式任务库和原去重文件在本地排除目录另存了更新前备份。公开成功页、更多拒绝提示、图片 HTTP 500 根因及完整实机换号链路仍待验证。

1. 当前目标与确定规则

目标是:自动下载、选文、上传、填写、排版和校验,等待用户亲手发表,然后观察结果、记录数量,达到账号目标后换号,继续下一篇。

  • 发表及重试发表必须由用户亲手点击。 不模拟点击、不调用提交函数、不直接发送发帖请求、不通过快捷键提交。自动化没有发布接口。
  • 用户选择分区、文章根目录、处理范围及每账号篇数 min/max;理财财经 fid=125 是演示样例,不硬编码为全部任务的目标。
  • 标题、正文或来源修改后重新进入人工审核;等待审核期间自动化不继续修改编辑器。
  • 全流程常驻“终止流程”按钮,跨标签、导航和换号保持生效;停止后不因刷新或服务重启自动恢复。
  • 同一文章在整个站点跨账号、跨版块去重。已公开发表或已受理待审核均阻止再次入队;结果不明时先核对。
  • 新下载文章不额外插入接口发布时间和分隔线。历史文件及源正文中原有的时间、文字不因此自动删除。

结论:工作流可行,单篇人工链路已有实机记录,但持久队列、本地桥接、统一终止、自动计数和与换号扩展联动仍需实现。实施重点从“寻找全部页面元素”转为“连接已有组件并保证停止、审核、去重和结果核对”。

2. 本轮变化与现状

模块 当前确认 后续工作
排版脚本 dww11-wechat-oneclick.user.js v1.0.9 新增独立“一键排版”;existingSource() 识别文末来源/作者及版权行;runFormat() 取出原尾注后交给 formatBody() 重新排版;无来源才弹窗补充 提供可等待、可取消、无模态弹窗的程序接口;验证复杂尾注与编辑器转换后重复执行
下载保存 article_writer.py 标题后直接接正文;不再插入接口 time;移除无文字且无图片的空标题节点;末尾仍生成标准来源尾注 输出持久文章清单与结构化来源/源网址/指纹,建立完整保存后的入队衔接
下载调度 app.py 频道、分页、下载去重、进度、停止;历史库仍只有指纹到目录映射;状态接口含汇总、日志、输出目录 独立发布队列、每篇完成登记、重启对账;不能拿日志当可靠文章队列
导入器 v1.0.0 stagePackage()、importPrepared()、附件上传及登记、编辑器填写校验 接入取消信号、无弹窗冲突状态、持久恢复;导入前处理长标题
dww11_make_package.py 已能生成 v1 Markdown/base64 图片包 包大小限制、当前任务按需传输、引用完整性校验
换号扩展 v3.0.4 自有账号库、抽号、登录、暂停与持久流程;下一账号按钮已有 ID 接收统一终止、输出可核对的换号结果,与发文批次计数协调;不能假定网站脚本能直接调用扩展内部路由
auto_news_upload/ 操作规范和两份 JSON 记录已存在 尚无完整自动执行程序或 SQLite 发布任务库

新版排版的“保留来源”指保留识别到的尾注文字;内部会规范化空白并重建为纯文本格式节点,不保证原 HTML、链接或空格逐字不变。自动化应展示提取结果,疑似误识别时暂停。

旧操作记录中“每次输入来源”和“排版后手工删除重复来源”属于当时演示行为。当前 v1.0.9 的独立排版入口已针对已有来源提供处理,不能再把这一功能整体列为未实现;仍需回归验证。微信 URL 采集入口仍走另一条流程,本项目只接独立排版逻辑。

下载器测试文件已含不插入发布时间的断言,本次未重跑测试。新下载文件的时间格式已明确,不再列为待确认项;这不授权清理历史稿件。

3. 已有实机证据与尚未解决的问题

既有演示记录:账号示例用户(UID <已匿名>),理财财经 fid=125,文章“刚靠新电影赚23亿票房,周星驰就卖掉内地影院”,来源“洲洲影视娱评”。用户亲手发表后,网站返回主题 23697411、首帖 PID 238766,记录时显示审核中。

  • 已明确受理 1 篇;已确认公开 0 篇。不得根据旧记录推断现在已审核通过,也不得重发这篇文章。
  • 导入阶段编辑器有 26 张图片;结果页正文 21 张、附件区 5 张。总数齐全不能证明正文位置和顺序正确。
  • 附件区图片为 image009.jpg、image014.jpg、image016.jpg、image025.jpg、image026.jpg。需要以附件 ID 与正文引用逐一对照,不只比较文件名或总数量。
  • 结果正文与待审稿有文字差异;记录未覆盖用户审核期间编辑动作,不能归因于网站转换或用户操作。
  • 本次未重新读取线上结果页;原演示未验证审核后的访客可见性、超长标题报错、随机数量与换号链路。

后续准备完成时保存基线快照,用户亲手点击时再捕获最终标题、编辑器正文、图片引用和附件映射,记录内容修订号与提交尝试。持久化可能来不及完成时要能识别缺失证据;不能为补记状态而代替用户重新提交。发布后分别检查受理状态与内容完整性,内容异常只标记待处理,不自动编辑或重发。

4. 目标工作流与架构

用户设置分区、根目录、处理范围、min/max
  → 初始化终止按钮与持久批次
  → 历史去重对账
  → 已完整下载文章校验 / 持续接收新文章
  → 单篇领取与文章包准备
  → 确认新帖标签、账号、分区
  → stagePackage → importPrepared
  → 独立一键排版 → 标题/正文/图片/尾注检查
  → 等待人工审核与用户亲手点击发表
  → 只观察提交结果
  → 原子登记受理记录、去重与本轮计数
  → 回首页并核对
  → 未达目标:下一篇;达到目标且仍有任务:换号并核对
  → 队列结束:结束批次

建议继续采用“本地 Python 任务服务 + 浏览器执行器 + 网站适配层”,复用导入器与换号扩展。第一步验证油猴特权请求与回环服务通信;若目标浏览器不兼容,再改为扩展桥接,不同时维护多套主链路。

本地服务仅监听回环地址,使用配对凭据和限定接口;只向网站传当前文章内容,不传下载 API Key 或账号库。不能把现有下载器 /api/session 直接当作对任意网页开放的任务授权入口。导入器是 @grant none,排版器有特权权限,必须实测页面与脚本隔离上下文间的调用,不能简单假定合并后仍可访问原来的 window 对象。

文件传递优先复用文章包,不依赖自动操作系统目录选择器。原生选择器可作为人工导入备选。同一版块的点击可能打开新标签,任务必须绑定实际标签及导航版本,不能在旧分区页继续执行。

电脑、本地服务及浏览器需保持运行;没有新增定时无人值守发表需求。发布始终需要用户点击。新任务的下载 Key 仍按现有方式在内存中使用,不默认落盘。

5. 数据接入、格式与来源

完整落盘与元数据

复用下载器现有保存及去重逻辑,新增每篇成功结果清单,至少保存稳定身份候选、原始标题、来源、源 URL、目录、Markdown 路径、图片清单和校验值。新发布记录写入失败时可通过清单对账补录,不应为回滚发布登记而删除完整文章。

当前保存器先创建最终目录,再逐个移动文件,扫描到目录并不代表下载结束。新下载采用成功回调/完成标记与清单协调入队;旧目录在确认非保存中且引用完整后显式导入。下载历史库失败时原下载器自有清理行为,与未来发布登记失败处理分开。

标题

保留 original_title,派生 submitted_title。超过 80 字符时按允许的计数预算截取前缀并追加字面量 ...,不能截断 emoji 代理对;站点实际按码点、UTF-16 或字节计数仍需实测。当前页面曾读到 maxLength=-1,“还可输入80个字符”也未随填入更新,不能作为可靠校验。

截断必须发生在导入器 compile() 之前。现有 preparePackage() 已接受 data.title,可以由适配层提供派生标题,不改原 Markdown;现有打包器本身尚未生成这个覆盖值。显示新旧标题并进入人工审核。若人工提交后收到明确超限拒绝,修正后仍由用户再次点击;结果不明时不改稿重投。

来源与正文

复用 v1.0.9 的 existingSource() 与 formatBody(),保留 4 号黑色正文、1 号银色尾注、图文间隔及图片适配。识别末尾来源时保留整段来源/版权文字,不只抽出名称再拼回默认句子。没有来源则在页面内要求补充,不能让原生 prompt 阻挡终止按钮。

需要验证:标准下载尾注、多行版权说明、重复尾注、正文中出现“来源”、来源后有图片、嵌套 FONT、纯文本换行、编辑器来回切换、重复排版。不得全局删除正文中的来源文字;原稿本身已有多条来源时应提示核对,而非宣称新函数能语义去重。

正文清理只沿用已确认规则;不自动删除历史发布时间、“打开网易新闻 查看精彩图片”等文字。下载器新生成格式与旧文件格式并存,文章身份不能仅靠整个 Markdown 的精确哈希判断。

图片与编辑器

下载器支持 WebP/AVIF/SVG,打包器和导入器仍只支持 JPG/JPEG/PNG/GIF。先在入队前拦截不兼容格式,不能等打包时静默漏掉;如后续增加转码,生成派生副本并重写引用,保留原文件。上传大小同时遵守导入器 20 MB 和网站当前限制。

校验顺序为:本地引用完整 → 上传附件返回编号 → 网站附件登记 → BBCode/可视化图片关联 → 排版前后附件引用保持 → 人工提交时最终快照 → 结果页正文与附件区对照。现有缓存仅在页面内有效,持久复用必须绑定账号与上传上下文并重新验证。

遇到旧稿恢复提示、非空编辑器或上传期间人工修改,暂停并保留现场。导入器现有 confirm 弹窗需要转换为页面内状态;不能自动确认覆盖。

6. 持久状态、发布去重与观察

独立 SQLite 任务库与下载历史库分开。启动前先迁入两份现有 JSON 的已受理记录,保证主题 23697411 不再入队;保留原 JSON 作为证据。再核对原有发布记录或本人历史帖子列表。标题相同只标记疑似重复,不能据此确认同一正文。完整历史对账尚未完成,不能把这一个样本当全量历史。

稳定身份优先关联原始文章 ID/规范化源 URL,同时保存正文与图片指纹、文件版本哈希和身份别名。当前下载历史只有指纹与目录,原始 URL/来源并未形成完整持久清单;历史稿无法恢复的信息要标为未知,不能猜造。跨账号、跨版块去重,改名、标题截断、删除后重新下载均不改变已受理身份。

建议记录:article_key、身份别名、source_url/source_id、内容及图片指纹、原始/提交标题、来源尾注、目录、账号 UID、fid、附件映射、排版版本、内容修订号、任务状态、批次 ID、领取租约/执行版本、尝试 ID、用户点击时间、最终快照、帖子 ID/URL、受理/审核/公开状态和错误。

downloaded → queued → importing → formatting → awaiting_user_review
  → user_submitting → published / accepted_pending_moderation

异常分支为 needs_attention、submit_unknown、rejected、stopped。其中 published 仅在有公开发表证据时使用;提交意图或点击事件不是网站受理证据。人工修改后记录新修订,继续等待人工审核。

  • 自动化只监听用户操作及网站结果,不主动触发提交。点击前预登记候选尝试,点击时关联最终快照;即使快照写入失败,也不能自动补交。
  • 结果需综合帖子 ID/URL、作者、分区、标题和受理/审核提示;跳转到首页、HTTP 200 或按钮变灰均不能单独证明成功。
  • 以“站点+帖子 ID”唯一键登记受理记录,并在同一事务更新去重与批次计数。重复打开、刷新及后续审核通过不重复加一。
  • 审核中计入明确受理数一次,公开数量另记;驳回不自动补发。结果页内容异常单独记录,不撤销受理去重。
  • 网络中断、关闭标签或证据不足进入 submit_unknown,先对账;租约过期也不能重投未决文章。
  • 多标签单篇互斥;刷新或服务重启先显示恢复状态,等待用户明确继续。已停止批次不得自动恢复。

7. 账号目标与统一终止

用户填写整数 1 ≤ min ≤ max。首次建立当前账号批次、以及确认换号成功后,从闭区间均匀抽取目标 n 并持久化。每账号批次只抽一次;暂停、刷新和重启不重抽。没有 min/max 时不能擅自设值或启动自动换号。

本轮只计明确受理的唯一文章,导入、排版、等待审核、失败和结果不明不计。达到 n 后,先完成记账,确认没有未决提交,回首页并核对,再触发现有“登陆下一帐号”。核对扩展流程结束和实际账号 UID/用户名;无法确认时暂停,不连续点换号。账号池只有一个可用账号等导致 UID 未变化时不能假装换号成功,应显示原因等待处理。

队列空时结束,不为凑数重发,也不无意义换号。账号手动变化、验证码、限制或登录异常时暂停,不带着旧附件上下文继续。账号密码继续由现有扩展管理。

统一终止必须覆盖首页、分区页、新帖页、结果页和换号页面。点击先持久写入 stopped 并更新执行版本;立即禁止新领取、下一张上传、排版写入、跳转和换号,取消可取消请求。所有异步返回重新检查停止状态,过期回调不得继续。

现有组件的停止并不贯通: 下载器停止是等待当前请求/保存结束;导入器没有对外取消接口;换号扩展有独立流程;排版仍使用模态弹窗。仅在外层增加按钮不能满足全流程终止。需要给这些模块增加取消/暂停衔接,尤其要在扩展开始退出/登录前以及后续各步骤检查共享停止状态。不能把扩展内部消息接口当作已公开的油猴 API。

停止不撤回已经发出的请求,允许被动核对其最终结果,但不继续业务动作。原演示使用浏览器控制条停止的例外不延续至正式实现。

8. 页面适配依据与剩余信息

环节 已有依据 仍需核对
分区入口 /special/post/;演示选择后新开标签 用户实际目标分区及各区必填项,不固定 fid=125
当前账号 #mumucms_username,用户名/用户链接编号 登录失效与换号成功的稳定判定
标题/正文 #subject、#e_textarea、#e_iframe、#e_switchercheck 当前网站编辑器同步与标题计数
导入 window.DWW11Importer,面板在 Shadow DOM 实际浏览器中程序接口与停止信号
排版 #dww11-format-oneclick v1.0.9 来源识别与发布后往返结果;目前没有公开排版 API
发表 #postsubmit、#postform 只观察人工操作;失败、超限、审核及成功提示适配
受理结果 /thread/23697411.html;样本首帖 #postmessage_238766 从当前结果提取动态帖子 ID/PID,不硬编码样本
换号 #dww11-extension-next 扩展完成/暂停状态及全局终止联动
历史对账 “修改/删除信息”进入本人帖子列表 列表 URL、分页、审核项与重复证据

无需重新提供已记录的完整单篇演示。下一批所需输入主要是:实际分区与文章范围、min/max、其他版块必填项、历史帖子入口及异常提示样本。标题计数、5 张图片落到附件区的原因、审核后的公开状态需要针对性验证。不需要密码、Cookie 或 API Key 值进入文档。

9. 实施顺序与验收

阶段 工作 完成条件
1:基础状态与停止 独立任务库、现有 JSON 迁入、历史对账、统一终止状态和常驻按钮;确定各组件取消协议 已受理样本不可重入队;跨标签互斥;刷新不自动运行;停止后无后续动作
2:文章衔接 完整落盘清单、文章身份、包传输、图片检查、导入前标题派生、本地配对通信 新旧格式均可处理;半成品不入队;长标题不改原稿;缺图和不兼容格式明确报错
3:排版与人工审核 封装 v1.0.9 独立排版接口,替换模态提示,接入导入取消和编辑冲突检查 尾注文字保留、标准来源只出现一次;反复排版及编辑器转换无累积问题;附件引用与顺序不变
4:人工提交观察 提交快照、动态结果解析、审核/公开区分、唯一受理计数、正文与附件核对 不经用户点击永不发表;用户修改后重新审核;刷新不重复计数;结果不明不重投;定位图片落附件区问题
5:批次与换号 min/max 持久目标、记账后回首页、复用登录流程、账号核对、终止联动 每批仅抽一次目标;达到目标且队列非空才换号;异常不连续换号;无旧账号附件串用
6:小批实机验收 覆盖故障恢复与多个页面场景 下载/上传/排版/待审/结果/换号各阶段终止均有效;断网、重启、多标签和人工改稿状态正确

重点回归场景:普通/多图/重复图片、空标题节点、多行尾注、来源后图片、重复排版、长标题与 emoji、非空编辑器、旧稿恢复、部分上传失败、上传超时、用户提交后响应丢失、审核中、驳回和换号中终止。先模拟验证,再做用户亲手提交的少量实机验收;不以已受理样本重发来测试。

10. 目录与本次交付范围

新实现仍放在 auto_news_upload/,后续规划为 service/、browser/、tests/、data/ 和启动说明;当前这些实现尚未建立。保留原下载目录、原历史库及现有演示记录。复用源码时记录版本,明确安装时启用的脚本组合,避免重复工具争用编辑器。

本次仅重写本实施计划,未修改业务脚本和历史记录。历史操作规范用于追溯当时实机行为;当前组件能力以本轮核对的源码为准,人工发表、去重、终止和换号规则继续遵循操作规范。

11. 2026-10-31:结果页现场资料补充

用户明确授权助手点击一次“发表帖子”并捕捉提示。网站返回“新主题需要审核,您的帖子通过审核后才能显示”,随后自动进入 /thread/23699911.html;详情页标题为“湖人只有一个卢卡·开拓者的四大金刚”,版块为体育休闲 fid=90,标题旁显示“(审核中)”。本次确认受理 1 篇,未确认公开,不重复提交或换号。完整过程与页面依据见操作规范第 12 节。

  • 已取得标题 #thread_subject、标题区域审核标记、作者 UID 链接、版块 fid 链接与首帖正文容器 #postmessage_238791 的现场依据;账号信息在可共享文档中继续匿名化。
  • 页面真实主题参数为 tid=236999,访问路径中的数字串为 23699911,首帖 PID 为 238791。结果解析和去重须统一标识规则,不能直接把路径数字串当作真实 tid,也不能据此批量改写历史记录。
  • 提示页的文字与跳转链接已捕捉,但未保存跳转前的容器 HTML。详情页关键 HTML 与截图已保存到 local-records/publish-result-23699911.json、local-records/publish-result-23699911.png。
  • 下一步完成结果观察适配、受理接口标识核对与重复计数验证,再进行后续计数/换号联调;公开、失败和审核后的访客可见性仍待验证。

本次仅同步观察记录,未修改业务代码、运行队列或去重库;这次授权代点不扩展为后续自动发表权限,也不替代正式工作流的人工发表边界。