wechat_msg_clicker/CLAUDE.md
2026-04-22 19:28:54 +08:00

65 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# WeChat 消息自动点击器
自动点击微信桌面端未读消息中的图片和文件,触发原始文件下载到本地目录。
## 项目背景
配合另一个信息收集项目使用:信息收集脚本负责将微信消息入库,但图片和文件需要被点击预览后微信才会下载原始文件到本地。本工具自动完成这个"点击"操作。
## 技术架构
- **语言**: Python 3.11+
- **核心技术**: macOS Accessibility API (AXUIElement) via pyobjc
- **目标应用**: 微信桌面端 v4.1.9+ (bundle ID: com.tencent.xinWeChat)
- **运行平台**: macOS Sonoma 14+
### 模块结构
```
wechat_clicker/
├── ax_bridge.py # AXUIElement 底层封装(属性读取、操作执行、键盘事件)
├── wechat_ui.py # 微信 UI 导航(找聊天列表、消息列表、解析 title 分类消息类型)
├── state_machine.py # UI 状态机(基于窗口数量判断状态、状态恢复)
├── automator.py # 主自动化逻辑(扫描→点击→预览→关闭→循环)
├── human_like.py # 拟人行为(高斯分布延迟、长休息、工作时间)
├── config.py # YAML 配置加载
└── logger_setup.py # 日志配置
```
### 关键设计决策
- 微信 v4.1.9 点击聊天会打开**独立窗口**(非页内导航),状态检测基于窗口计数
- 元素查找使用 role+name 搜索(非硬编码索引),适应 UI 变化
- 消息类型通过 title 内容判断:`"图片"` → 图片,`"文件\n..."` → 文件
- 预览通过 Escape 键关闭
## 使用方法
```bash
# 前置条件
pip install -r requirements.txt
# 系统设置 > 隐私与安全 > 辅助功能 → 添加终端/Python
# 复制配置
cp config.example.yaml config.yaml
# 运行
python main.py # 持续运行
python main.py --once # 单次扫描
python main.py --dry-run # 只扫描不点击
python main.py --dump-ui # 输出 UI 元素树
python main.py --debug # 详细日志
```
## 配置重点
- `config.yaml` 中可设置扫描间隔、延迟范围、白/黑名单、工作时间、媒体类型开关
- 默认不处理视频(`media.click_videos: false`
- 默认黑名单包含微信系统账号
## 注意事项
- 微信窗口需要保持可见(不能最小化)
- 运行时会占用微信前台操作
- 建议在专用电脑上运行