通过 AppleScript 操控 macOS 微信客户端,给指定联系人发送文字消息。
纯键盘+剪贴板驱动,不依赖任何微信逆向或非官方协议,零封号风险。
激活微信 → Cmd+F 搜索联系人 → Enter 选中 → 点击输入框 → 粘贴消息 → 发送
本工具模拟人类操作微信桌面客户端,通过 macOS 原生的 AppleScript + Accessibility API 实现。微信无法区分脚本操作和真人操作。
| 依赖 | 版本 | 说明 |
|---|---|---|
| macOS | 12.0+ | 需要 Apple Silicon 或 Intel Mac |
| 微信 Mac | 4.1.x | 在 4.1.7 上测试通过 |
| cliclick | 5.0+ | 命令行鼠标点击工具 |
| Bash | 3.2+ | macOS 自带 |
brew install cliclickcurl -o ~/tools/wechat_send.sh https://raw.githubusercontent.com/TonyLTalentexe/wechat-send/main/wechat_send.sh
chmod +x ~/tools/wechat_send.sh或者克隆仓库:
git clone https://github.com/TonyLTalentexe/wechat-send.git
chmod +x wechat-send/wechat_send.sh首次运行时,macOS 会弹窗要求授权。前往:
系统设置 → 隐私与安全性 → 辅助功能 → 勾选你的终端应用(Terminal / iTerm2 / Ghostty 等)
# 基本用法
./wechat_send.sh "联系人名称" "消息内容"
# 示例
./wechat_send.sh "张三" "明天下午3点开会"
./wechat_send.sh "工作群" "收到,已确认"
# 查看帮助
./wechat_send.sh --help| 变量 | 默认值 | 说明 |
|---|---|---|
WECHAT_SEND_KEY |
cmd |
发送快捷键。cmd = Cmd+Enter,enter = Enter。取决于你的微信设置 |
CLICLICK |
/opt/homebrew/bin/cliclick |
cliclick 可执行文件路径。Intel Mac 通常是 /usr/local/bin/cliclick |
# 如果你的微信设置为 Enter 发送
export WECHAT_SEND_KEY=enter
./wechat_send.sh "张三" "你好"
# Intel Mac 用户
export CLICLICK=/usr/local/bin/cliclick| 机制 | 说明 |
|---|---|
| 截屏存证 | 发送后自动截屏保存到 /tmp/wechat_send_audit/,保留最近 20 张 |
| 并发锁 | mkdir 原子锁,防止多实例同时操控微信 |
| 剪贴板恢复 | trap EXIT 确保异常退出也能恢复原始剪贴板 |
| 环境清理 | 开始前按 3 次 Esc 关闭残留弹窗 |
| 窗口校验 | 微信窗口小于 400x400 时��绝执行 |
| 焦点恢复 | 发完后自动切回调用方应用 |
| 操作通知 | 发送前弹 macOS 通知提醒用户勿操作 |
- 运行时占屏约 5 秒:微信必须在最前面接收键盘事件,期间请勿操作键鼠
- 开环控制:微信 Mac 4.x 的 Accessibility tree 极浅,脚本无法读取当前聊天对象,靠截屏存证事后追溯
- 搜索匹配风险:联系人名称需足够唯一。如果搜索结果不精确,可能发到错误对话
- 群聊搜索:不活跃的群聊可能被"搜索网络结果"抢占排序(v2 将解决此问题)
- 仅支持文字消息:不支持图片、文件、语音等
- 不适合批量群发:高频使用可能触发微信风控
- macOS 26.3 (Sequoia) / Apple Silicon (arm64)
- WeChat Mac 4.1.7 (build 34371)
- cliclick 5.1
- 个人聊天发送文字消息
- Cmd+F 搜索 → Enter 选中
- 安全机制(截屏、并发锁、剪贴板恢复)
- 群聊分治搜索策略(Cmd+N / Cmd+F + Down×N 自动切换)
- @ 群成员能力(
--at "成员名"参数) - 浏览器 fallback 自动恢复
1. 参数校验 + 依赖检查(微信运行中?cliclick 已装?)
2. 获取并发锁(mkdir 原子操作,30 秒自动过期)
3. 保存当前剪贴板内容
4. 获取微信窗口坐标,计算输入框点击位置
5. 记住当前前台应用(发完后切回)
6. macOS 通知"请勿操作键鼠"
7. 激活微信 + set frontmost(双重确保前台)
8. 3×Esc 清理残留弹窗
9. Cmd+1(聊天列表)→ Cmd+F(搜索)→ 粘贴联系人名 → Enter 选中
10. cliclick 点击输入框(搜索后焦点不会自动跳到输入框)
11. 粘贴消息 → Cmd+Enter 发送
12. 截屏存证 → 清理旧截屏
13. 切回原来的前台应用
14. 恢复剪贴板
MIT