# WeChat 消息自动点击器 自动点击微信桌面端未读消息中的图片和文件,触发原始文件下载到本地目录。 ## 背景 微信桌面端不会自动下载图片/文件的原始数据,需要用户手动点击预览后才会触发下载。本工具通过 macOS 辅助功能 API 自动完成这个操作,配合信息收集系统实现群聊数据的自动化入库。 ## 系统要求 - macOS Sonoma 14+ - Python 3.11+ - 微信桌面端 v4.1.9+(已登录) ## 安装 ### 1. 安装 Python 依赖 ```bash cd wechat_msg_clicker pip install -r requirements.txt ``` 依赖包: - `pyobjc-framework-Quartz` — macOS 图形框架绑定 - `pyobjc-framework-ApplicationServices` — 辅助功能 API 绑定 - `pyobjc-framework-Cocoa` — macOS 应用框架绑定 - `PyYAML` — 配置文件解析 ### 2. 授权辅助功能权限 脚本需要 macOS 辅助功能权限才能操作微信 UI 元素: 1. 打开 **系统设置** > **隐私与安全性** > **辅助功能** 2. 点击左下角 **+** 号 3. 添加你使用的终端应用(如 Terminal.app 或 iTerm2) 4. 如果通过 Python 直接运行,还需要添加 Python 解释器路径(如 `/Users/你的用户名/miniconda3/bin/python3`) 5. 确保添加后开关为 **开启** 状态 > 首次运行时如果未授权,脚本会弹出系统提示框引导你授权。 ### 3. 准备配置文件 ```bash cp config.example.yaml config.yaml ``` 按需编辑 `config.yaml`,主要配置项: | 配置项 | 默认值 | 说明 | |---|---|---| | `scan.interval_seconds` | 30 | 扫描间隔(秒) | | `scan.max_chats_per_scan` | 5 | 每次最多处理几个聊天 | | `schedule.start_hour` | 8 | 工作开始时间 | | `schedule.end_hour` | 23 | 工作结束时间 | | `filter.mode` | all | 过滤模式:all / whitelist / blacklist | | `filter.blacklist` | 微信系统号 | 排除的聊天名称 | | `media.click_images` | true | 是否点击图片 | | `media.click_files` | true | 是否点击文件 | | `media.click_videos` | false | 是否点击视频(默认关闭) | | `media.max_media_per_chat` | 20 | 每个聊天最多点击几个媒体 | ### 4. 确保微信就绪 - 微信桌面端已启动并登录 - 微信窗口保持可见(不能最小化到 Dock) - 建议在专用电脑上运行,脚本运行时会操作微信前台窗口 ## 验证流程 建议按以下顺序逐步验证,确认每步正常后再进入下一步: ### Step 1:验证 UI 访问 ```bash python main.py --dump-ui ``` 预期输出:微信的 UI 元素树,包括窗口、按钮、聊天列表等信息。 **如果报错**: - `辅助功能权限未授予` → 检查系统设置中的辅助功能授权 - `微信未运行` → 确保微信桌面端已启动 - `未找到微信主窗口` → 确保微信已登录,窗口未最小化 ### Step 2:试运行扫描 ```bash python main.py --dry-run --once --debug ``` 预期输出:扫描聊天列表,显示有未读消息的聊天和媒体数量,但**不会实际点击**。 检查日志确认: - 能正确识别未读聊天 - 聊天名称解析正确 - 未读数量解析正确 ### Step 3:单次完整执行 ```bash python main.py --once --debug ``` 这会执行一次完整的循环:扫描 → 点击聊天 → 点击图片/文件 → 关闭预览 → 关闭会话。 观察过程中: - 微信窗口是否正常被操作 - 图片预览是否正常打开和关闭 - 是否能正确返回聊天列表 ### Step 4:正式运行 ```bash python main.py ``` 脚本会持续运行,按配置的间隔和工作时间自动处理新消息。 后台运行建议使用 `nohup` 或 `tmux`: ```bash # 方式一:nohup nohup python main.py > /dev/null 2>&1 & # 方式二:tmux(推荐,方便查看日志) tmux new -s wechat python main.py # Ctrl+B D 分离会话 # tmux attach -t wechat 重新连接 ``` ## 命令参考 | 命令 | 说明 | |---|---| | `python main.py` | 持续运行 | | `python main.py --once` | 单次扫描后退出 | | `python main.py --dry-run` | 只扫描不点击 | | `python main.py --dump-ui` | 输出微信 UI 元素树 | | `python main.py --debug` | 开启 DEBUG 级别日志 | | `python main.py --config path/to/config.yaml` | 指定配置文件 | 参数可组合使用,如 `python main.py --dry-run --once --debug`。 ## 日志 日志同时输出到控制台和文件 `wechat_clicker.log`(可在配置中修改)。 日志文件自动轮转,默认最大 10MB,保留 5 个备份。 ## 注意事项 - **封号风险**:工具内置了多种拟人策略(随机延迟、长休息、工作时间限制),但自动化操作始终存在被检测的可能,请自行评估风险 - **微信更新**:微信版本更新可能改变 UI 结构,导致脚本失效。如遇到问题,先用 `--dump-ui` 检查 UI 变化 - **前台占用**:脚本运行时会操作微信窗口,不建议同时手动使用微信