macOS 上自动给微信好友群发消息
前阵子有个需求:给微信上几百个好友发节日祝福。手动发——复制粘贴几百次——不现实。微信没开放 API,只能走 GUI 自动化的路。
macOS 微信是基于原生的 AppKit,底层是 WKWebView。AppleScript 直接操控微信 GUI。
基础方案:AppleScript
核心流程很简单:打开微信 → 搜索好友 → 发送消息。
tell application "WeChat"
activate
delay 0.5
tell application "System Events"
keystroke "f" using command down -- Command+F 搜索
delay 0.3
keystroke "对方微信名"
delay 0.5
keystroke return
delay 0.3
keystroke "新年快乐!"
delay 0.2
keystroke return
end tell
end tell
微信 macOS 版 Command+F 是搜索联系人和聊天记录,直接定位到好友。
批量发送的问题
几百个好友,每个消息之间需要适当延迟。微信有风控机制——频繁操作会触发"操作频繁"提示。试下来 2 到 3 秒间隔比较安全。
还有个问题:列表怎么给?AppleScript 本身不方便从文件读数据。用 Python 做编排层、AppleScript 做执行层:
import subprocess
import time
contacts = ["张三", "李四", "王五"] # 从文件读取
message = "新年快乐!🎉"
for name in contacts:
script = f'''
tell application "WeChat" to activate
delay 0.5
tell application "System Events"
keystroke "f" using command down
delay 0.3
keystroke "{name}"
delay 0.5
keystroke return
delay 0.3
keystroke "{message}"
delay 0.2
keystroke return
end tell
'''
subprocess.run(["osascript", "-e", script])
time.sleep(3) # 风控间隔
进阶:图片和文件
发图片稍复杂。微信支持拖拽或粘贴。用剪贴板传图片,AppleScript 粘贴到微信输入框再发送。
-- 先把图片复制到剪贴板
set the clipboard to (POSIX file "/path/to/image.jpg")
-- 在微信中粘贴
keystroke "v" using command down
keystroke return
坑和注意事项
微信 macOS 版必须在前台——发送过程中不能切走窗口。AppleScript 的 activate 会强制把微信带回前台。每次 keystroke 之间的 delay 不能太短——UI 响应需要时间,delay 太短按键可能被吞掉。中文输入法状态影响——如果当前是中文输入法,keystroke 可能进入拼音模式。解决:每次发消息前确保输入法是英文(keystroke 切输入法或提前检查)。
安全提醒:这种方案只适合个人合规用途。微信有反骚扰机制,大规模批量操作可能被封号。用来给真正的好友发祝福可以,做营销群发请三思。而且脚本能执行的操作有限——微信转账、发红包这类功能不走 GUI,AppleScript 做不到。
完整脚本
所有代码已经放在 GitHub 上。包含联系人列表管理、发送状态记录、失败重试逻辑。wechat-automation。
AppleScript 是个被低估的 macOS 工具。大量原生 App 没有 API,它是少数还能打通的自动化路径。