ENZH

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,它是少数还能打通的自动化路径。


© Xingfan Xia 2024 - 2026 · CC BY-NC 4.0