Files
auto_news_upload/发布流程操作记录与自动化规范.md

22 KiB
Raw Permalink Blame History

广谈大湾网:下载、导入排版、人工发布与换号

本文中的帐号名称和用户编号已匿名化;真实记录保存在本地排除目录中。

记录日期:2026-10-31(北京时间)。本文依据用户指导、Chrome 实际操作和现有源码检查编写。它是后续实现的流程依据;需求不等于功能已经实现。

1. 不可改变的边界

  • “发表帖子”只能由用户亲手点击。 自动化只下载、选择、上传、填写、排版、校验、提示审核、观察提交结果和记录计数。禁止模拟点击发布、调用提交函数、直接发送发帖请求或通过快捷键提交。
  • 标题被截断、正文或来源被修改后,都必须重新进入人工审核。发生标题过长错误后,“重新尝试发表”也由用户再次点击。
  • 用户决定分区和文章根目录;“理财财经”只是本次例子,不能成为所有文章的固定分区。
  • 全流程页面常驻“终止流程”按钮。点击后立即取消后续动作、重试、队列领取和自动换号,不自动恢复。已经到达网站的请求不能撤回,需保留记录并核对。
  • 已发表或已被网站接收待审核的文章不能再次排入发布队列,换账号也不能绕过去重。

2. 本次演示记录

项目 结果
站点 https://www.dww11.com/
当前账号 示例用户,页面用户编号 <已匿名>
分区 理财财经,fid=125
入口 首页右上角“免费发布信息”→ 分区页“理财财经”
分区页 https://www.dww11.com/special/post/
新帖页 https://www.dww11.com/forum.php?mod=post&action=newthread&fid=125
标签行为 点击分区后新开标签,原分区页保留
测试标题 刚靠新电影赚23亿票房,周星驰就卖掉内地影院
原标题长度 22 个 Unicode 码点;本篇无需截断。网站计数方式尚未实测
目录 <项目根目录>/tanshuapi_news_downloader/downloads/刚靠新电影赚23亿票房,周星驰就卖掉内地影院
目录内容 1 个 Markdown + 26 张 JPG,共 27 个文件
来源 洲洲影视娱评(取文章末尾来源,不取正文“信息来源”截图)
导入 已完成;面板提示“已填写标题、正文和 26 张配图”
排版 已完成,正文 4 号黑色,尾注 1 号银色
核对 编辑器 DOM 中图片 26 张,最终来源尾注仅 1 条
发布 用户已亲手点击;网站已受理,详情页显示“审核中”
帖子链接 https://www.dww11.com/thread/23697411.html
帖子标识 主题 ID 23697411;首帖 PID 238766
数量 已明确受理 1 篇;已确认审核通过并公开 0 篇
发布后图片 正文 21 张 + 附件区 5 张,共 26 张
换号 未执行;本次未设置最小值和最大值

本次页面没有“终止流程”按钮。用户明确同意本次演示暂用浏览器控制条停止,常驻页面按钮仍是后续自动化的必备条件。该例外只适用于本次演示。

本次已验证导入、排版、用户亲手发表以及网站受理后的帖子详情页;页面明确显示“审核中”。尚未验证审核通过后的访客可见性、标题超限错误或换号链路。用户称发表后自动回首页,但本次实际读取的原编辑器标签已导航至帖子详情页,不能将“提交后必然自动回首页”写成网站行为。应在结果登记后主动回首页并核对。

3. 用户操作步骤与自动化对应

  1. 启动前让用户选择分区、下载目录、待处理文章范围,并填写每个账号发布数量的最小值和最大值。展示当前账号。先初始化常驻终止按钮与持久任务记录。
  2. 从下载器接收完整落盘的文章目录。检查正文、图片引用、来源和去重记录;保存中或缺文件的目录不进入导入队列。
  3. 点击“免费发布信息”,展示实际可用分区,由用户选择。等待新标签打开并核对分区名称及 fid;不能继续操作旧标签或仅凭坐标判断。
  4. 在右下角“本地文章导入 · 1.0”选择“选择文章目录”。日常演示选择单篇目录,目录应包含 Markdown 和全部配图;不要只选 .md。如果选择根目录导致出现多个 Markdown,必须明确选中哪一篇。
  5. 在系统文件选择器进入用户指定根目录,再选择对应文章文件夹。系统“Upload”是把所选文件提供给页面读取,不是发表帖子;浏览器另有目录文件数量确认。
  6. 阅读导入面板标题、正文预览、图片数量和告警。点击“上传配图并填写”后才开始向网站上传正文引用的图片。等待明确完成提示,不能用固定等待时间代替完成判断。
  7. 读取文章最后的标准尾注 来源:名称,如有侵权,请联系删除。,只取名称。本篇是“洲洲影视娱评”;用户先前茅台文章例子是“酒业内参”,不能硬编码。
  8. 点击编辑工具栏绿色“一键排版”(不是网站自带“自动排版”,也不是“一键导入微信公众号并排版”)。实际弹窗要求输入来源公众号名称,并非标题。本篇填“洲洲影视娱评”,确认后会提示排版完成。
  9. 标题由本地导入器填入页面标题框;仍需核对完整标题。当前“一键排版”不弹标题输入框。如果用户说“输入标题”,应在标题框填写和确认,而不是填到来源弹窗。
  10. 校验标题、正文、图片数量和顺序、尾注唯一性、账号和分区。保留用户原文;本篇的发布时间、“打开网易新闻 查看精彩图片”等原始文字未擅自清理。需要清理时应成为用户可见的规则。
  11. 页面提示“已完成,等待人工审核,请自行点击发表帖子”。自动化停止修改编辑器,保留终止按钮,等待用户操作;不自动保存草稿或发表。网站原有自动保存仍可能运行。
  12. 用户自行点击“发表帖子”。自动化只观察结果。若标题超长,按第 5 节修正,重新提示审核,等待用户再次点击。
  13. 收集帖子链接/编号、作者、分区和结果证据后记账。审核中单独记录并阻止重发;结果不明时先核对,不能自动重试发布。
  14. 已明确成功后先持久保存发布记录与计数,再回到首页。达到当前账号目标篇数且没有未决提交时,点击页面顶部“登陆下一帐号”,核对登录成功后再处理下一篇。

4. 页面适配依据与当前缺口

以下选择器来自本次可见页面或本地源码,未来运行时须重新检查,不能保证网站改版后仍成立。

控件 当前依据 注意事项
当前用户 #mumucms_username 同时读取页面用户名与用户链接编号
下一账号 #dww11-extension-next 完成记录后才允许换号;核对成功,不以按钮点击作为成功
标题 #subject 本次读取到 maxLength=-1,不能只依赖 HTML maxlength
可视化正文 iframe#e_iframe 内的 body 图文与尾注检查应在 iframe 内进行
纯文本开关 #e_switchercheck 不将 Markdown 直接当网站 BBCode
一键排版 #dww11-format-oneclick 原生 prompt 输入来源,随后 alert 提示完成
发表 #postsubmit 仅用于识别状态和观察人工提交,禁止自动触发
导入面板 油猴脚本面板,包含 choose/import 等控件 面板可能位于 Shadow DOM;普通页面选择器未必能定位,优先按可见控件操作

本次实际遇到的兼容问题:

  • 浏览器连接器直接设置目录文件被“允许访问文件网址”权限阻止。本次没有更改扩展权限,改用 Chrome 原生系统选择器完成。后续实现应优先复用本地文章包接口,减少对文件对话框的依赖。
  • macOS 路径含中文,逐键输入曾丢失中文;通过文本框完整赋值成功定位。输入后必须核对完整路径,不能只看末级数字或英文。
  • 导入器能完成 26 张图片上传,并临时禁用发表按钮;上传完成后恢复。上传过程中不允许换号。
  • 来源重复: 一键排版保留了导入正文中的原尾注,又追加银色尾注。本次在编辑器中删除原来的那一条,保留银色尾注,复查最终只出现一次。后续应在排版适配器中精确处理末尾标准尾注,不能全局删除正文中的“来源”。
  • 页面“还可输入 80 个字符”在导入后仍显示 80,不能将这个显示值当作可靠的标题长度校验结果。
  • 页面有“上次未提交成功的数据”恢复提示;本次没有点击恢复,避免把旧稿混入新稿。后续遇到已有正文或恢复冲突必须暂停处理。

5. 标题超过 80 字符

保留 original_title,派生 submitted_title。超过站点限制时截取前缀并追加字面量 ...,总长不超过 80;即长度允许时保留前 77 个字符再加 3 个点。示例中的“标题文本...”表示实际标题前缀和省略号,不额外加入中文括号。

当前站点的“字符”计数方式尚未通过超长标题实测。实现时兼容中文和 emoji,不能切断代理对;先按保守规则校验,再根据站点明确错误调整。若站点按字节计数,则按其实际字节预算截取,不能反复盲目减少。

现有导入器在读取阶段对超过 80 个 Unicode 码点的标题直接报错。后续需把截断放在导入前,否则到不了人工审核阶段。截断不覆盖原 Markdown 标题,也不改变文章去重身份。

如果用户点击发表后才收到标题超限提示:确认网站明确未接受 → 修正标题 → 显示新旧标题 → 重新人工审核 → 用户再次点击。任何自动修正都不等于用户已批准发表。

6. 发布记录、去重与恢复

建议独立 SQLite 发布任务库,与下载去重库分开;下载成功不能视为发布成功。本次先保存演示任务 JSON,尚未实现自动数据库或网站历史帖子同步。

稳定文章身份优先采用下载器原始文章 ID 或规范化源 URL,同时保存正文与图片内容指纹用于发现重新下载/改名副本。禁止只按本地目录名、截断标题或当前账号去重。默认整个站点跨账号、跨版块不重复发表同一篇;如以后需要重发,必须由用户显式决定。

建议字段:article_key、source_url/source_id、content_hash、原始/最终标题、目录、来源、状态、账号 UID、fid、附件映射、排版版本、人工提交时间、提交尝试编号、帖子 ID/URL、网站受理/审核/公开状态、错误、创建和更新时间。日志不保存密码、Cookie 或上传凭证。

主状态:

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

分支:stopped、needs_attention、submit_unknown、rejected。未决提交不得重新上传或领取同一文章。单批次串行,跨标签领取加持久锁;刷新后先恢复状态,不自动启动。

去重记录需要覆盖用户已发表帖子:优先导入原有记录,或从“修改/删除信息”进入本人帖子列表进行核对。仅标题相同只能标记疑似重复,不能据此自动认定是同一正文。本次未扫描历史帖子,后续批量运行前必须完成历史对账;本次文章已记为“网站已受理、审核中”,已有帖子 ID 与 URL,必须阻止重发;不能误写为等待用户点击,也不能写为审核通过。

成功记录与计数使用同一个事务:帖子唯一键(站点+帖子 ID)防止页面刷新重复加一。先记录再返回首页。遇到网络超时、页面关闭或不明确提示,记录 submit_unknown,人工/页面核对后再决定,禁止自动重复发表。

网站明确受理待审核时,记 accepted_pending_moderation 并锁住文章。本规范建议把明确受理计入账号本轮提交数量一次,另存公开发表数量;后续审核通过只改变公开状态,不再加本轮数量。本次已观察到网站审核中状态,因此本地记录明确受理数为 1、已确认公开数为 0;批量自动记账尚未实现。驳回不自动补发或重投。

7. 每个账号随机篇数与换号

用户填写整数 min、max,要求 1 ≤ min ≤ max。首次为当前账号创建发布批次及每次确认换号成功后,从闭区间 [min,max] 均匀抽取整数 n,保存目标和当前计数。min=max 时固定该数量。不要按每篇重新抽 n,刷新、暂停或重启也不重抽。

  • 本轮计数只含当前发布批次明确成功/明确受理的唯一文章,不含上传、排版、等待人工审核、失败和结果不明。
  • 达到 n 后先保存记录与 switch_pending,回首页,核对没有待提交草稿,再点击“登陆下一帐号”。
  • 观察并确认实际 UID/用户名变化且登录成功,再建立下一账号批次、重置批次计数并抽新 n。不可在不确定结果时重复点击换号。
  • 验证码、账号异常、频率限制、登录失败或账号池无可用账号时暂停,保留当前文章与计数;不把受限文章换账号重投。
  • 用户手动改变账号时立即暂停,重新关联批次与上传附件;不能沿用旧账号附件上下文。
  • 队列已经处理完时直接结束,不为“凑满 n”重复文章,也不无意义换号。

本次没有给定 min/max,所以不随机设置目标,也不执行换号。账号扩展现有自己的抽号/登录持久记录,应复用其登录流程,不另存账号密码。

8. 常驻终止按钮的实现要求

按钮在首页、分区页、新帖页、结果页、换号页面保持可见,不依赖折叠的导入面板。跨标签共享同一批次停止状态,导航后先恢复按钮和停止状态再执行任务。

点击立即写入持久 stopped 并提升运行版本号,取消定时器、队列和可取消的上传/下载请求;每个异步步骤返回时检查停止标志和版本,过期回调不得再填写、跳转或换号。浏览器自带模态弹窗会阻挡网页按钮,因此自动流程应把来源/审核提示改成页面内面板,保留停止入口。

已被服务器接收的图片/帖子不能被停止按钮撤回。停止后允许被动记录已在途请求的最终结果,但不得继续业务动作;需要清楚显示“已停止,已发出的请求可能仍已完成”。人工终止后必须由用户明确重新启动,不能因刷新或服务重启自动恢复。

9. 后续实现与验收清单

  1. 优先实现常驻终止按钮、持久队列、站点级去重和历史发布对账,再接批量导入。
  2. 改造导入前标题截断、唯一来源尾注和可重复执行排版;保留原文与本地文件。
  3. 建立本地任务服务与浏览器执行器之间的配对通信,只传当前文章所需数据,不传下载 API Key 或账号库。
  4. 人工发布边界验收:没有用户点击时,等待任意时间都不会发表;标题修正后仍等待新的用户点击。
  5. 验证缺图、上传部分失败、重复来源、长标题、emoji、多 Markdown、非空编辑器、人工修改、刷新/断网、多标签竞争。
  6. 用户实际发布后,补录成功页或审核中页面证据、帖子 URL/ID,并验证重复打开不会增加计数。
  7. 给定 min/max 后验证 n 范围、每账号仅抽一次、达到目标换号、核对新 UID、恢复不丢计数。
  8. 在下载、上传、排版、等待审核、观察结果和换号各阶段点击终止,确认不再触发后续动作。

10. 当前交接

用户已亲手点击发表。原编辑器标签现为帖子详情页,标题与作者“示例用户”一致,面包屑为理财财经,显示“审核中”。已保存主题 ID、首帖 PID、URL、受理数量与去重记录,禁止再次发同一文章。登记后已点击网站首页入口,并核对 URL 为 https://www.dww11.com/,当前账号仍为示例用户(UID <已匿名>);没有设置 min/max,因此未换号。

发布结果检查发现正文内有 21 张图片,另外 5 张在附件区:image009.jpg、image014.jpg、image016.jpg、image025.jpg、image026.jpg,总数 26 张;来源尾注仅一条。发布后的正文与初次待审稿存在差异(例如原发布时间及“打开网易新闻 查看精彩图片”文字已不在结果正文中)。本次未记录用户审核期间的具体编辑动作,无法将差异归因于用户修改、编辑器同步或网站转换;后续需在用户点击的时刻保存最终待提交快照,再与结果对照。不得自动编辑或重发这篇已受理的帖子。

截图:test/history/周星驰文章_待人工审核.jpg(历史待审稿)、test/history/周星驰文章_网站审核中.jpg(网站受理结果)。演示任务:test/history/演示任务记录.json;站点级去重登记:发布去重记录.json。记录保存本次结果,不代表完整历史同步或批量程序已经实现。

11. 发布结果判断与本次补录

  • 用户点击后,不按“回到首页”判断成功;先记录实际跳转 URL 和页面结果。
  • 本次 URL 为 /thread/23697411.html,页面标题、理财财经面包屑、楼主示例用户及“审核中”共同确认网站已受理。DOM 首帖容器为 #postmessage_238766。
  • 网站审核中并非失败,不能为追求公开状态而再次提交;也不能仅凭当前登录用户能看到详情,宣称所有访客可见。
  • 刷新、重复读取或后来审核通过时,都用站点+主题 ID 保证受理数量只计一次。
  • 本次没有出现标题超限,相关处理仍是待验证需求。
  • 完整历史对账、常驻终止按钮、随机数量和自动换号仍属后续实现及验收范围。

12. 2026-10-31:实际提交与审核中页面观察

本节补录一次新的现场操作,与第 2、10、11 节的历史演示分别记录。用户本次明确要求由助手点击“发表帖子”并捕捉快速跳转提示;助手仅点击一次,未修改待发表标题或正文、未重新上传、未重复提交。本次授权仅适用于这一次现场操作,不改变工作台默认等待用户亲手发表的规则。

提交与结果

项目 观察结果
页面显示的发表时间 2026-10-31 17:02:54(北京时间,来自结果页时间节点)
文章标题 湖人只有一个卢卡·开拓者的四大金刚
当前账号与作者 示例用户,UID <已匿名>;真实账号信息保存在本地观察记录中
目标版块 体育休闲,fid=90
提交前页面 https://www.dww11.com/forum.php?mod=post&action=newthread&fid=90
提交后提示页 forum.php?mod=post&action=newthread&fid=90&extra=&topicsubmit=yes
网站原文提示 新主题需要审核,您的帖子通过审核后才能显示
提示页跳转链接 https://www.dww11.com/thread/23699911.html
实际跳转 提示页 → 帖子详情页;本次未观察到自动回首页
详情页状态 标题旁明确显示“(审核中)”
实际主题参数 页面“复制链接”及相邻主题链接使用 tid=236999
首帖标识 PID 238791;正文容器为 #postmessage_238791
受理结论 本次已明确受理 1 篇;本次已确认公开 0 篇
后续动作 未再次发表、未换号;未据此补写运行队列、受理计数或发布去重库

页面适配依据

数据 现场依据 适配注意事项
提交提示 可访问性树中的 messagetext 容器及其提示文字、跳转链接 已捕捉文字与链接,但跳转前未成功保存该容器 HTML;结果选择器仍需验证
帖子标题 #thread_subject,位于 h1.ts 内 与最终提交标题核对,不能只用浏览器页签标题
审核状态 标题所在 td.plc.mumucms_ftit.vwthd 内的 span.xg1 包含“(审核中)” 限定标题区域,避免把正文中出现的同名文字当作状态
主题标识 标题区域“复制链接”的 mod=viewthread&tid=236999 地址路径为 23699911.html,不能直接将全部数字解析为实际主题 ID
首帖与作者 #postmessage_238791;现场作者链接含 mod=space&uid=<已匿名> 动态提取 PID、UID,并限定首帖作者区域;页面顶部登录账号不能单独证明作者身份
目标版块 现场版块链接含 mod=forumdisplay&fid=90 与任务版块核对,不只匹配“体育休闲”文字

网站已受理待审核,不能将该篇重新入队或为追求公开状态再次提交。本次没有验证审核通过后的访客可见性、失败提示、超长标题错误、自动记账和换号链路;看到登录态详情页不代表已公开。

本地资料保存在排除目录 local-records/:publish-result-23699911.json 保存观察摘要、标题区域 HTML 与作者/版块链接,publish-result-23699911.png 保存标题旁“审核中”的截图。文件名沿用访问地址的数字串,不代表实际 tid。本节是文档补录,不等于运行去重库已登记;后续对账需关联原文章身份,并统一主题标识的处理方式。

13. 0.2.0 实现与历史补核

已实现审核中详情适配:限定标题区域审核标志,结合真实 TID、首帖楼主标识、作者 UID、版块 fid 与最终提交标题核对。受理、去重和批次计数在同一事务登记;图文检查与受理状态分开,图片延迟占位、附件区或文字/顺序差异会保留受理去重并暂停。记账后仍运行时返回首页,再领取或换号;停止后仅允许被动记账。

现场只读核对了现有页面结构,没有点击发表、上传、改文或换号。当前模板面包屑容器为 .mumucms_pt,首帖作者位于 #post_<PID> 的 .plc .pti .authi,首帖楼主链接为 #postnum<PID>;图片同时可能具有 id=aimg_<AID> 与 aid=<AID>。static/image/common/none.gif 是占位图,不能凭 naturalWidth 大于零宣称原图已显示。

已将第 12 节现场记录关联队列既有人工提交快照:TID 236999、PID 238791,记为受理待审核,阻止重发;历史补核没有增加当前批次计数。图文完整性保留待核对标记,流程暂停。任务库和原去重记录均先备份再更新,不改写原文章。

公开成功页仍无样本,审核标记缺失不能作为已公开证据。标题超限拒绝分支已做模拟测试,尚无实机错误样本;其余未知提示进入待核对。完整线上连续发布与真实账号换号仍需由用户亲手发表的小批验收。