# wechatdocsdownload **Repository Path**: bullzhou0318/wechatdocsdownload ## Basic Information - **Project Name**: wechatdocsdownload - **Description**: 对指定微信公众号,自动下载所有文档。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-18 - **Last Updated**: 2026-03-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 微信公众号文章下载工具 v2.0 基于本地代理捕获PC微信流量的公众号文章下载工具,支持下载用户已关注公众号的所有历史文章(包括付费文章)。 ## ✨ 核心特性 ### v2.0 新增功能 - 🚀 **并发下载**: 支持3线程并发下载,速度提升3倍 - 🔄 **增量更新**: 智能识别已下载文章,只下载新文章 - 📊 **数据导出**: 支持CSV、JSON、Markdown格式导出 - 🔧 **配置管理**: 完善的配置管理和持久化 - 💾 **文件操作**: 统一的文件操作模块 - ⚡ **错误处理**: 企业级错误处理和重试机制 - 🖥️ **增强UI**: 更完善的图形界面和功能集成 ### 基础功能 - 🎯 **支持付费文章**: 通过用户自己的登录凭证访问,可下载已关注公众号的付费文章 - 🤖 **自动捕获凭证**: 自动拦截PC微信请求,提取访问凭证 - 📦 **批量下载**: 支持批量下载公众号所有历史文章 - 💾 **Markdown格式**: 自动转换为Markdown格式,方便导入Obsidian等笔记软件 - 🖼️ **图片下载**: 可选下载文章图片到本地 - 📊 **进度跟踪**: SQLite数据库记录下载状态 - 🖥️ **图形界面**: Tkinter GUI界面,操作简单直观 ## 🚀 快速开始 ### 1. 环境要求 - Python 3.8+ - Windows系统(需要设置系统代理和安装证书) - PC微信客户端 - 建议内存: 4GB+ - 建议磁盘空间: 10GB+ ### 2. 安装依赖 ```bash # 克隆仓库 git clone https://gitee.com/bullzhou0318/wechatdocsdownload.git cd wechatdocsdownload # 安装依赖 pip install -r requirements.txt ``` ### 3. 启动应用 **方式一:使用启动脚本(推荐)** ```bash # Windows run_gui.bat ``` **方式二:直接运行** ```bash # 默认启动增强版(推荐) python src/main_gui.py # 或直接启动增强版 python src/main_enhanced.py # 启动标准版 python -c "from src.main_gui import main_standard; main_standard()" ``` ### 4. 使用流程 **重要:PC微信代理设置** PC微信会自动使用系统代理设置。请按以下步骤操作: 1. **以管理员身份运行工具** - 右键点击 `run_gui.bat` → "以管理员身份运行" - 或使用管理员权限打开PowerShell后运行 `python src/main_gui.py` 2. **启动代理**: 点击"启动代理"按钮(代理将在127.0.0.1:8080启动) 3. **安装证书**: 首次使用需要点击"安装证书"(需要管理员权限) 4. **设置系统代理**: 点击"设置系统代理"(需要管理员权限) - 这会将系统代理设置为127.0.0.1:8080 - **PC微信会自动使用这个代理** 5. **验证代理**: 打开浏览器访问任意HTTPS网站,确认能正常访问 6. **打开微信**: 打开PC微信,进入目标公众号 7. **点击文章**: 点击任意一篇文章,工具会自动捕获凭证 8. **开始下载**: 在公众号列表中选择要下载的公众号,点击"下载选中(并发)"或"下载全部(并发)" 9. **导出数据**: 点击"导出数据"按钮,选择导出格式和条件 **详细代理设置指南**: 请查看 [PROXY_SETUP_GUIDE.md](PROXY_SETUP_GUIDE.md) ## ⚡ 性能指标 ### 下载性能 - **并发数**: 3个线程并发下载 - **下载速度**: 约1-2秒/文章(不包含图片) - **批量下载**: 50篇文章约1-2分钟 - **内存占用**: <200MB(正常使用) - **CPU占用**: <30%(正常使用) ### 稳定性 - **连续运行**: 支持24小时连续运行 - **自动重试**: 网络错误自动重试(最多3次) - **错误恢复**: 凭证过期自动提示用户刷新 - **断点续传**: 支持中断后继续下载 - **数据安全**: 本地存储,不上传 ### 测试覆盖 - **单元测试**: 99个测试用例,100%通过 - **集成测试**: 核心流程全覆盖 - **性能测试**: 验证性能指标达标 - **稳定性测试**: 验证长期运行稳定性 ## 📁 项目结构 ``` wechat-article-dl/ ├── src/ │ ├── proxy/ # 代理服务器模块 │ │ ├── server.py # mitmproxy封装 │ │ └── flow_handler.py # 请求拦截插件 │ ├── fetcher/ # 文章列表获取 │ │ └── article_list.py # 分页获取文章 │ ├── downloader/ # 文章下载 │ │ ├── article.py # 下载、解析、转换 │ │ └── concurrent_downloader.py # 并发下载器 │ ├── storage/ # 存储管理 │ │ ├── db.py # SQLite数据库 │ │ ├── file_handler.py # 文件操作模块 │ │ └── exporter.py # 数据导出模块 │ ├── ui/ # 用户界面 │ │ ├── main_window.py # Tkinter主窗口 │ │ └── enhanced_main_window.py # 增强主窗口 │ ├── utils/ # 工具模块 │ │ ├── config.py # 配置管理 │ │ ├── logger.py # 日志配置 │ │ ├── error_handler.py # 错误处理模块 │ │ └── system_proxy.py # 系统代理管理 │ └── main_gui.py # 主程序入口 ├── data/ │ ├── downloads/ # 下载目录 │ └── db.sqlite # 数据库文件 ├── logs/ # 日志文件 ├── .ai-knowledge/ # AI知识库 ├── config.json # 配置文件 ├── requirements.txt # 依赖列表 └── README.md # 项目说明 ``` ## 🔧 技术方案 ### 核心原理 通过本地代理服务器拦截PC微信的HTTPS请求,提取公众号访问凭证(`__biz`、`Cookie`、`appmsg_token`),然后模拟请求获取文章列表并下载。 ### 技术栈 - **代理服务器**: mitmproxy - 拦截HTTPS请求 - **并发控制**: threading + Queue - 线程池管理 - **正文提取**: readability-lxml - 提取文章正文 - **格式转换**: html2text - HTML转Markdown - **数据库**: SQLite - 存储下载记录 - **GUI**: Tkinter - 图形用户界面 ### 数据流 ``` 用户打开PC微信 → 进入公众号 → 点击文章 ↓ 代理拦截请求 → 提取凭证(__biz, Cookie, token) ↓ 构造请求 → 分页获取文章列表 ↓ 并发下载文章 → 解析正文 → 转换Markdown ↓ 保存文件 → 记录数据库 → 支持增量更新 ``` ## ⚙️ 配置说明 配置文件 `config.json`: ```json { "proxy_port": 8080, // 代理端口 "download_path": "data/downloads", // 下载路径 "format": "markdown", // 下载格式 "download_images": true, // 是否下载图片 "auto_start_proxy": false, // 是否自动启动代理 "max_concurrent": 3, // 最大并发数 "accounts": [], // 公众号列表 "window_geometry": "800x600+100+100" // 窗口位置 } ``` ### 公众号配置格式 ```json { "name": "唐书房", "biz": "MzkzNDUxODc4MQ==", "last_cookie": "...", "last_token": "...", "last_capture_time": "2026-03-19T15:30:00" } ``` ## 📝 注意事项 ### 1. 管理员权限 首次使用需要以管理员身份运行,用于: - 设置系统代理 - 安装CA证书到"受信任的根证书颁发机构" ## 📚 文档索引 完整的文档索引和说明请查看 [DOCS_INDEX.md](DOCS_INDEX.md) ### 核心文档 - **[QUICK_START.md](QUICK_START.md)** - 快速开始指南 - **[USER_MANUAL.md](USER_MANUAL.md)** - 用户手册 - **[INSTALLATION_GUIDE.md](INSTALLATION_GUIDE.md)** - 安装指南 - **[DEVELOPER_GUIDE.md](DEVELOPER_GUIDE.md)** - 开发者指南 - **[CHANGELOG.md](CHANGELOG.md)** - 变更日志 ### 技术文档 - **[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)** - 架构设计 - **[docs/USAGE.md](docs/USAGE.md)** - 使用说明 ### 归档文档 项目各阶段的完成报告已归档到 `archive/reports/` 目录,详见 [DOCS_INDEX.md](DOCS_INDEX.md) ### 2. 证书安装 mitmproxy生成的CA证书需要安装到系统: - 证书位置: `~/.mitmproxy/mitmproxy-ca-cert.cer` - 安装位置: "受信任的根证书颁发机构" - 安装命令: `certutil -addstore -user Root "证书路径"` ### 3. 凭证有效期 - `appmsg_token`: 约30分钟有效期 - `Cookie`: 有效期较长,但可能过期 - 建议: 凭证过期时重新打开微信文章 ### 4. 并发控制 为避免触发微信风控: - 下载并发数不超过3(默认3个线程) - 每次请求间隔0.5-1.5秒随机延时 - 图片下载间隔0.5-1.5秒 ### 5. 增量更新 工具会自动检查已下载的文章: - 只下载新文章,避免重复下载 - 节省时间和带宽 - 提高下载效率 ## 🐛 常见问题 ### Q: 启动代理失败? A: 检查端口是否被占用,尝试更换端口。 ### Q: 无法捕获公众号? A: 1. 确认代理已启动 2. 确认证书已安装 3. 确认PC微信已设置代理(工具会自动设置) ### Q: 下载失败? A: 1. 检查凭证是否过期(重新打开微信文章) 2. 检查网络连接 3. 查看日志文件 `logs/app.log` ### Q: 证书安装失败? A: 以管理员身份运行工具。 ### Q: 并发下载太快被限制? A: 降低 `max_concurrent` 配置项,建议设置为2。 ## 📖 相关文档 - [需求方案](需求方案及开发要求/需求和方案以及aicoding要求.md) - 完整设计说明书 - [修复方案](IMPLEMENTATION_FIXES.md) - 详细修复方案 - [修复报告](FIXES_COMPLETION_REPORT.md) - 修复完成报告 - [完成报告](PROJECT_COMPLETION_REPORT.md) - 项目完成报告 - [快速开始](QUICK_START_GUIDE.md) - 快速开始指南 - [重构方案](REFACTOR_PLAN.md) - 技术方案详细说明 - [架构设计](.ai-knowledge/ARCHITECTURE.md) - 系统架构文档 - [代码风格](.ai-knowledge/STYLE_GUIDE.md) - 开发规范 ## 📜 版本历史 ### v2.0 (2026-03-19) **新增功能**: - ✅ 并发下载(3线程) - ✅ 增量更新 - ✅ 数据导出(CSV/JSON/Markdown) - ✅ 文件操作模块 - ✅ 完善的配置管理 - ✅ 增强的UI界面 - ✅ 错误处理和重试机制 **优化改进**: - 🚀 下载速度提升3倍 - 📊 数据库表结构统一 - 🔧 配置管理完善 - 💾 更好的文件管理 ### v1.0 (2026-03-18) **初始功能**: - ✅ 代理捕获 - ✅ 文章下载 - ✅ Markdown转换 - ✅ 基础UI界面 ## 📜 开源协议 MIT License ## 🤝 贡献 欢迎提交Issue和Pull Request! ## 📮 联系方式 - Gitee: https://gitee.com/bullzhou0318/wechatdocsdownload