• 桌面应用
  • 视频
  • 网络
  • MCP 服务

【免费下载链接】wx_channels_download

微信视频号下载器

项目地址: https://gitcode.com/gh_mirrors/wx/wx_channels_download
点击查看 免费下载

本篇文章基于开源仓库 wx_channels_download(微信视频号下载器)的 v250913 版本发布说明,逐条解读该版本的三项关键变化:视频号首页新增下载按钮、全新 uninstall 命令(可卸载工具安装的根证书)、以及长视频页面空白问题的修复。文章不仅覆盖版本更新的实操要点,还结合仓库源码深入讲解 uninstall 命令的权限校验、代理清理与证书删除链路,以及根证书在"拦截响应、注入下载按钮"这一核心机制中的角色,帮助读者理解版本演进的底层逻辑,并掌握根证书的安装、自定义与卸载的完整闭环。

v250913 版本概览

v250913.md 是仓库发布记录(releases.md)中的一篇版本说明,该版本包含三个要点:

  • 视频号首页增加下载按钮;
  • 新增 uninstall 命令,可卸载本工具安装的根证书;
  • 修复打开长视频页面空白的问题。

其中 uninstall 命令是本次版本新增的 CLI 能力,与其对应的使用文档位于 docs/cli/uninstall.md,实现代码位于 cmd/uninstall.go。下面分别展开。

视频号首页增加下载按钮

视频号下载器的工作原理是:工具启动后对本地网络请求进行代理(见 cmd/root.go 中 root_cmd 的 Long 描述:"启动后将对网络请求进行代理,在微信视频号详情页面注入下载按钮"),通过拦截并修改视频号响应来注入下载能力。

v250913 之前,下载按钮主要注入在视频号详情页;本版本将注入范围扩展到首页,即视频号首页信息流中的视频也可以直接点击下载,减少了"先进入详情页、再触发下载"的路径。

从源码结构看,视频号首页数据的获取与解析由 internal/adapter/wxchannels/model.go 承担,其中 wxchannels_home_contents_from_response 负责把首页响应转换为统一的内容模型,说明首页信息流在数据层是完整受支持的。与之配套的前端下载能力位于 frontend/inject/download/ 目录(下载管理器页面入口 frontend/inject/download/index.js、数据模型 frontend/inject/download/model.js),负责下载任务的展示与管理。

相关配置项

首页与详情页的下载行为受到视频号插件配置控制,定义在 internal/adapter/wxchannels/config.go 的 ChannelsPluginConfig 中,配置命名空间为 channels。与本版本相关的核心配置项如下:

配置项类型默认值说明
channels.disableLocationToHomeboolfalse是否禁止从视频号详情页重定向到首页(视频号默认行为)
channels.download.frontendboolfalse是否通过前端解密、下载,不调用后台下载能力
channels.download.defaultHighestboolfalse未指定视频规格时是否默认选择原始视频
channels.download.coverboolfalse下载视频或图集时是否同时下载封面
channels.download.pauseWhenDownloadboolfalse点击下载时是否暂停播放

这些配置项均支持热更新(HotReload: true),修改后无需重启即可生效。其中 download.frontend 关系到下载是在前端页面完成还是在后台完成,详见下文"长视频页面空白修复"一节。

uninstall 命令:卸载下载器安装的根证书

为什么需要根证书

下载器要拦截并修改视频号响应、注入下载按钮,必须对 HTTPS 流量进行中间人解密,因此首次使用时会在系统根证书库中自动安装一个根证书(默认名为 SunnyNet)。该证书随二进制一起打包,位于 pkg/certificate/certs/SunnyNet.cer,并内嵌到程序中(见 pkg/certificate/certificate.go 中的 //go:embed certs/SunnyNet.cer 与 //go:embed certs/private.key)。

根证书属于系统的全局信任链,安装后会影响本机所有 HTTPS 客户端对代理流量的信任判断。当用户不再使用本工具、或希望恢复系统干净的证书环境时,就需要一个可靠的卸载入口,这正是 uninstall 命令的价值所在。关于根证书的信任范围与风险提示,可参考 手动安装根证书:"安装根证书会影响系统的全局信任链,请仅在充分信任的前提下进行。"

命令用法

在下载器可执行文件所在目录下执行:

wx_video_download uninstall

命令行为(依据 docs/cli/uninstall.md):

  • 卸载下载器自动安装的根证书;
  • 卸载后,再次使用下载器(重新启动并执行首次安装流程),会重新安装证书。

因此 uninstall 并非一次性永久关闭功能,而是"先卸载、再用时自动重装"的循环,适合临时清理系统证书库的场景。

源码级实现解析

uninstall 命令的实现位于 cmd/uninstall.go,整体流程为:注册命令 → 权限校验 → 关闭系统代理 → 逐个检查并卸载候选证书 → 输出结果并等待退出。

1. 命令注册与权限校验

命令通过 cobra 注册到根命令下(root_cmd.AddCommand(uninstall_certificate_cmd)),命令描述为"删除初始化时自动安装的证书"。执行时首先检查当前进程是否具备管理员权限:

if !platform.IsAdmin() {
    if !platform.RequestAdminPermission() {
        fmt.Printf("\nERROR: Failed to run. Please right-click and select \"Run as administrator\".\n")
        wait_for_uninstall_exit(cmd.InOrStdin(), cmd.OutOrStdout())
    }
    return
}

在 Windows 上,安装或卸载系统根证书必须拥有管理员权限(docs/config/cert.md 同样注明"Windows 安装或卸载证书需要管理员权限")。如果当前进程权限不足,程序会尝试请求提权;提权失败则输出错误提示,并等待用户按 Enter 关闭窗口(wait_for_uninstall_exit),避免命令行窗口一闪而过导致用户看不到错误信息。

2. 先关代理、再删证书

uninstall_certificate_command 的第一步是关闭系统代理,而不是直接删除证书:

settings := system.ProxySettings{Device: viper.GetString("proxy.networkService")}
if err := system.DisableProxy(settings); err != nil {
    fmt.Printf("\nERROR: Failed to cancel proxy: %v\n", err.Error())
    return
}

代码注释说明了设计意图:Device 为空时会自动检测主网络服务;但如果用户显式配置了 proxy.networkService(对应命令行 --dev 参数,见 cmd/root.go 中的 flag 绑定),则必须按该配置清理,否则会在从未写入过代理的网络服务上误清代理。这一步确保卸载证书前,系统不再依赖该证书做 HTTPS 解密。

3. 候选证书名的枚举与逐个卸载

由于不同时期、不同配置可能安装过不同名称的证书,卸载逻辑并不只针对单一证书名,而是枚举了一组候选名称:

func uninstall_certificate_names(configured_name string) []string {
    candidates := []string{certificate.DefaultCertFiles.Name, "SunnyRoot", strings.TrimSpace(configured_name)}
    ...
}

候选集合包含三类:

候选来源说明
certificate.DefaultCertFiles.Name(即 SunnyNet)程序内置默认证书的名称
SunnyRoot兼容历史版本可能安装过的证书名称
配置项 cert.name用户自定义证书名称

候选名称会做去重(seen map),随后逐个检查系统中是否存在名为该证书的根证书:

installed, err := certificate.CheckHasCertificate(name)
...
if !installed {
    continue
}
if err := certificate.UninstallCertificate(name); err != nil { ... }
removed = append(removed, name)

CheckHasCertificate 与 UninstallCertificate 的声明位于 pkg/certificate/certificate.go:前者遍历系统证书库,按证书主体通用名称(Subject.CN)匹配;后者按名称调用平台相关实现执行卸载(平台差异实现分布在 certificate_windows.go、certificate_linux.go、certificate_darwin.go 等文件)。

4. 结果输出
  • 全部候选证书均未安装时,输出黄色提示:未找到需要删除的根证书;
  • 卸载成功时,对每个成功删除的证书输出绿色提示:删除根证书 'xxx' 成功;
  • 任何一步失败(检查证书、删除证书、关闭代理)都会以 ERROR: 前缀输出,并提前结束。
5. 与自定义根证书的配合

如果用户使用了自定义根证书(配置见 docs/config/cert.md:cert.file、cert.key、cert.name),卸载时同样适用:

  • uninstall 会把配置的 cert.name 纳入候选名单,只要该名称与证书的 CN 一致,即可被正确检测并卸载;
  • 文档同时提醒:cert.name 应与证书的通用名称(CN)一致,否则可能无法正确检测或卸载已安装的证书;
  • 若未配置 cert.name,则使用默认值 Echo(注意:此默认值不会出现在候选列表中,卸载逻辑优先覆盖内置的 SunnyNet 与历史 SunnyRoot 名称)。

与手动安装文档的闭环

当自动安装失败、或用户需要手动恢复证书环境时,仓库提供了完整的 手动安装根证书 文档,覆盖 Windows(双击导入、MMC 管理单元、受信任的根证书颁发机构)、macOS(钥匙串访问、系统钥匙串、"始终信任")与 Linux(Debian/Ubuntu、Fedora/RHEL/CentOS、Arch/Manjaro 的 update-ca-certificates / update-ca-trust / trust extract-compat 命令)。结合 uninstall 命令,用户可以完成"安装 → 使用 → 卸载"的完整证书生命周期管理;若担心内置证书风险,也可以安装自己的根证书(参考 证书配置)。

长视频页面空白问题修复

问题背景

v250913 修复了"打开长视频页面空白"的问题。理解这个修复,需要结合下载能力的演进历史:

  • 在早期版本中,视频的下载与解密都在前端页面完成(配置项 channels.download.frontend 对应的行为);
  • 从 v251226 起,默认改为后台下载:"之前下载、解密都是在前端,下载长视频经常会中断,而且会阻塞前端页面操作,现在点击「下载」默认是在后台下载了。并且刷新页面不会中断下载,退出下载器后会中断所有下载任务。"

长视频通常体积大、耗时长,若下载逻辑在前端执行,视频详情页面容易在长时间任务中发生页面渲染异常(表现为空白)。v250913 对长视频页面空白的修复,正是针对这一环节的页面稳定性改进。

当前推荐配置

依据 长视频下载 文档:

  • 251226 及之后的版本默认在后台下载,长视频无需额外配置,像普通视频一样点击「下载」即可,刷新前端页面不会中断下载任务;
  • 退出下载器会中断所有正在进行的下载任务;
  • 若不需要后台下载,可以在配置文件中指定前端下载(配置键 channels.download.frontend,默认 false,详见 前端下载说明);
  • 后台下载模式下还支持通过 filenameTemplate 生成目录,例如 <code>{{author}}/{{filename}}_{{spec}}</code> 可将文件按作者名归档(详见 下载时的文件名称)。

因此,对 v250913 用户而言,升级后打开长视频页面遇到空白问题的概率已大幅降低;若仍出现异常,可优先确认是否使用了旧版前端下载模式,以及下载器代理与根证书状态是否正常。

版本升级与验证

仓库的版本管理相关命令与文档包括:

升级到 v250913 或更高版本后,可以通过以下方式验证三项变化:

  1. 首页下载按钮:启动下载器(代理生效、根证书已安装)后,打开视频号首页,观察信息流视频上是否出现下载按钮;
  2. uninstall 命令:执行 wx_video_download uninstall,观察证书清理输出(成功提示为绿色 删除根证书 'xxx' 成功),并可到系统证书库确认对应证书已消失;
  3. 长视频页面:打开任意长视频详情页,确认页面正常渲染且下载任务默认在后台进行。

小结

v250913 是一次兼顾功能新增与稳定性修复的版本:首页下载按钮扩大了下载入口的覆盖范围;uninstall 命令为系统根证书提供了正规的清理通道(含权限校验、代理清理、多候选证书名兼容卸载的完整链路);长视频页面空白修复则与后续版本的后台下载演进一脉相承。对于需要深入了解证书机制的读者,建议结合 手动安装根证书、证书配置 与 cmd/uninstall.go 源码交叉阅读,即可掌握从安装、自定义到卸载的完整证书管理体系。

  • 桌面应用
  • 视频
  • 网络
  • MCP 服务

【免费下载链接】wx_channels_download

微信视频号下载器

项目地址: https://gitcode.com/gh_mirrors/wx/wx_channels_download
点击查看 免费下载
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐