65 lines
2.3 KiB
Markdown
65 lines
2.3 KiB
Markdown
# 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`)
|
||
- 默认黑名单包含微信系统账号
|
||
|
||
## 注意事项
|
||
|
||
- 微信窗口需要保持可见(不能最小化)
|
||
- 运行时会占用微信前台操作
|
||
- 建议在专用电脑上运行
|