Skip to content

fix: 识别并标记隐私保护文章(仅内部分享可见) - #181

Open
Weidows wants to merge 1 commit into
wechat-article:masterfrom
Weidows:fix/validate-spa-private-articles
Open

fix: 识别并标记隐私保护文章(仅内部分享可见)#181
Weidows wants to merge 1 commit into
wechat-article:masterfrom
Weidows:fix/validate-spa-private-articles

Conversation

@Weidows

@Weidows Weidows commented Jun 7, 2026

Copy link
Copy Markdown

问题描述

有的文章抓取后,文章状态显示为空。这是因为微信公众号新增了一种 SPA 隐私文章 页面类型,内容通过 Vue 动态加载(vite + vue 构建),页面不包含传统的 #js_article 元素和 window.cgiDataNew 数据。

当前 validateHTMLContent 无法识别这种页面类型,走到最后一个 else 分支返回 ['Error', null],导致:

  1. _status 字段永远不会被更新(始终为空)
  2. 用户只能看到空的状态,不知道文章为何不可用

分析

抓取示例文章并分析 HTML 结构发现:

  • 传统文章: 包含 <div id="js_article"> 和内嵌的 window.cgiDataNew
  • SPA 隐私文章: 使用 <div id="app"></div> 作为 Vue 挂载点,内容通过 private.*.js JS 包动态加载
  • 页面 body 类包含 appmsg_skin_default appmsg_style_default
  • 没有包含文章内容的 HTML 结构

修复

validateHTMLContent 中新增检测逻辑:当页面包含 <div id="app"> 挂载点(且不匹配前面已知结构)时,返回 ['Exception', '隐私保护,仅内部分享可见']

通过已有的异常处理链:
validateHTMLContent → Exception with msg → download:exception → onStatusChange → updateArticleStatus

正确地将文章的 _status 更新为「隐私保护,仅内部分享可见」,让用户在表格中直观地看到文章状态。

测试

  • 正常文章(含 #js_article):仍返回 Success
  • 已删除文章(.weui-msg 含删除提示):仍返回 Deleted
  • 隐私文章(含 <div id="app">,无 #js_article):返回 Exception + 提示信息
  • 环境异常(.weui-msg 含其他提示):仍返回 Exception
  • 正常文章同时含 #app 容器:#js_article 优先匹配,仍返回 Success
  • 未知页面:仍返回 Error

相关 issue

Fixes #(issue 号,如有)

微信公众号新增了SPA隐私文章页面类型,内容通过 Vue 动态加载,
不包含传统的 #js_article 结构。validateHTMLContent 目前无法识别
此类页面,导致 _status 显示为空。

新增检测逻辑:当页面包含 <div id="app"> 挂载点(无 #js_article)
时,返回 Exception 状态并标记为「隐私保护,仅内部分享可见」,
通过现有的 download:exception → onStatusChange → updateArticleStatus
链路正确更新文章的 _status 字段。
@Weidows

Weidows commented Jun 7, 2026

Copy link
Copy Markdown
Author

分析时使用的示例文章链接(SPA 隐私文章页面,内容通过 Vue 动态加载):
https://mp.weixin.qq.com/s/z9V9P78KZU7lKofexd_MSw

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant