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 不能太短,因为界面反应要时间,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