ENZH
和 AI 讨论这篇文章
ChatGPTClaude

我用脚本给几百个微信好友群发了祝福

📊 幻灯片

前阵子有个需求,要给微信上几百个好友发节日祝福。手动发的话就是复制粘贴几百次,这个肯定不现实。微信又没有开放 API,所以只剩 GUI 自动化这一条路。反正思路就是写脚本模拟人去点它的界面。

macOS 的微信是原生 AppKit 写的,底层是 WKWebView,AppleScript 可以直接操控它的 GUI。


基础方案:AppleScript

核心流程很简单,大概就三步:打开微信,搜索好友,把消息发出去。其实就是把人手动干的那套动作,拿脚本重放一遍。

微信没有开放 API,脚本只能假扮成人去操作界面——搜索好友、输入、回车——把消息发出去微信没有开放 API,脚本只能假扮成人去操作界面——搜索好友、输入、回车——把消息发出去

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 做执行层:Python 负责读列表、控制节奏,真正按键的活还是丢给 AppleScript 去干。

把自动化拆成两层:上面 Python 编排层读列表、控节奏,下面 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)  # 风控间隔

进阶:图片和文件

发图片要稍微绕一下。微信支持拖拽或者粘贴,所以可以拿剪贴板中转:先把图片复制到剪贴板,再在微信输入框里粘贴、发送。

-- 先把图片复制到剪贴板
set the clipboard to (POSIX file "/path/to/image.jpg")
-- 在微信中粘贴
keystroke "v" using command down
keystroke return

坑和注意事项

这套东西的坑基本都出在 GUI 自动化本身。第一,微信必须在前台,发送过程中不能切走窗口去干别的,AppleScript 的 activate 会强制把微信带回前台。第二,每次 keystroke 之间的 delay 不能太短,UI 响应需要时间,delay 太短按键可能就被吞掉。第三是输入法,如果当前是中文输入法,keystroke 可能进入拼音模式,解决办法是每次发消息前确保输入法是英文,用 keystroke 切一下,或者提前检查一遍。

然后是安全层面的提醒:这个方案只适合个人合规用途。微信有反骚扰机制,大规模批量操作可能被封号,给真正的好友发祝福没什么问题,拿去做营销群发就请三思了。另外脚本能执行的操作也有限,微信转账、发红包这类功能不走 GUI,AppleScript 做不到。


完整脚本

完整的代码放在 GitHub 上了:wechat-automation,里面有联系人列表管理、发送状态记录、失败重试这些逻辑。

顺便说一句,这套 AppleScript 的思路不只微信能用,macOS 上其他没开放 API 的原生 App 也可以照着搞。

和 AI 讨论这篇文章
ChatGPTClaude
AX工具箱第 1 篇 · 共 10 篇
← 上一篇下一篇 →

订阅更新

新文章发布时发到你的邮箱,不发别的。


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