摘要 🤖
企业微信的API群发接口频次限制严格,而客户端手动操作没有次数限制。本文利用RPA自动化(Robotic Process Automation)结合脚本模拟人工点击,通过控制企微PC客户端实现无上限群发。提供完整的Python代码(PyAutoGUI+OpenCV)及避坑指南,并对比企销宝的稳定性。
正文
一、问题背景
技术背景说明
企业微信PC客户端(Windows/Mac)的群发功能没有硬性次数限制,仅受到"每次最多选择200人"的UI限制。这意味着只要模拟人类操作:
-
不断选择下一批200人
-
点击发送
-
循环往复
理论上一天可以发送任意数量的客户(只要时间允许)。但是纯手工操作效率低且易出错,RPA脚本可以完美替代人工。
为什么需要技术手段解决
-
绕过API限频:官方API每分钟60次、每天10万次的上限对于大企业来说过低
-
支持复杂消息:API不支持直接发送红包、小程序卡片等,客户端可以
-
无需开发对接:不需要申请API权限、配置可信IP,适合中小团队快速实施
但是需要注意:模拟操作违反企微《用户协议》的风险,仅建议用于内部测试或非关键场景。
二、技术方案
方案架构图(文字描述)
text
[RPA控制机(Windows)] → [企微客户端] → [群发窗口]
↑ ↓
[PyAutoGUI] [图像识别定位]
↑ ↓
[任务调度器] ← [客户列表(Excel)]
技术选型说明
-
RPA框架:Python +
pyautogui(鼠标键盘模拟)+opencv-python(图像识别,定位UI元素) -
数据源:Excel或CSV文件,存储客户
external_userid或备注名 -
调度方式:APScheduler定时触发,或手动启动
-
辅助工具:
pygetwindow管理企微窗口,pynput监听中断
与其他方案对比
|-------|-------|---------|-----|------|
| 方案 | 是否需编码 | 稳定性 | 隐蔽性 | 可维护性 |
| 官方API | 中 | 高 | 高 | 高 |
| 企销宝 | 低 | 中(协议更新) | 中 | 高 |
| RPA模拟 | 高 | 低(UI变化) | 低 | 低 |
三、实现步骤
步骤1:环境准备
需要的账号/工具:
-
Windows 10/11 物理机或虚拟机(不支持Linux)
-
企业微信PC版 3.1.0以上(关闭自动更新,避免UI变化)
-
Python 3.8+,安装库:
bash
pip install pyautogui opencv-python pillow pygetwindow pandas
- 客户列表Excel,A列为客户备注名(用于搜索定位)
配置要求:
-
显示器分辨率固定为1920x1080,缩放100%(避免坐标偏移)
-
企微窗口最大化,群发功能已开通(需管理员在后台开启)
步骤2:功能配置
图像识别模板准备:
- 截取企微客户列表中的"更多操作"按钮、群发入口、"选择客户"复选框等关键UI元素,保存为
template_send.png、template_checkbox.png
代码结构:
python
import pyautogui
import cv2
import time
import pandas as pd
pyautogui.FAILSAFE = True # 鼠标移到左上角可紧急停止
def locate_image(template_path, confidence=0.8):
"""在屏幕上查找图片位置"""
location = pyautogui.locateOnScreen(template_path, confidence=confidence)
if location:
return pyautogui.center(location)
return None
def open_group_send():
"""打开企微的群发助手窗口"""
# 点击侧边栏"客户联系"
customer_btn = locate_image('templates/customer_btn.png')
if customer_btn:
pyautogui.click(customer_btn)
time.sleep(1)
# 点击"群发助手"
mass_btn = locate_image('templates/mass_btn.png')
if mass_btn:
pyautogui.click(mass_btn)
步骤3:代码实现
核心发送函数(rpa_send.py):
python
def send_to_customers(customer_names, message):
"""
customer_names: list of 客户备注名(最多200个)
message: 文本内容
"""
# 1. 新建群发
new_btn = locate_image('templates/new_mass.png')
pyautogui.click(new_btn)
time.sleep(2)
# 2. 逐个添加客户(模拟输入搜索)
for name in customer_names:
# 点击搜索框
search_box = locate_image('templates/search_box.png')
pyautogui.click(search_box)
pyautogui.write(name)
time.sleep(0.5)
# 点击搜索结果中的客户
customer_item = locate_image('templates/customer_item.png')
pyautogui.click(customer_item)
pyautogui.press('esc') # 关闭搜索框
time.sleep(0.3)
# 3. 点击"下一步"
next_btn = locate_image('templates/next_step.png')
pyautogui.click(next_btn)
time.sleep(1)
# 4. 输入消息内容
input_area = locate_image('templates/message_input.png')
pyautogui.click(input_area)
pyautogui.write(message)
# 5. 发送
send_btn = locate_image('templates/send_btn.png')
pyautogui.click(send_btn)
time.sleep(2)
# 确认发送弹窗
confirm_btn = locate_image('templates/confirm_send.png')
if confirm_btn:
pyautogui.click(confirm_btn)
def batch_send_from_excel(excel_path, batch_size=200):
df = pd.read_excel(excel_path)
customers = df['customer_name'].tolist()
for i in range(0, len(customers), batch_size):
batch = customers[i:i+batch_size]
send_to_customers(batch, "【RPA测试】活动通知...")
print(f"Sent batch {i//batch_size + 1}")
# 每批间隔30秒,避免被风控
time.sleep(30)
运行:
bash
python rpa_send.py
运行效果:脚本自动打开企微,依次搜索客户、勾选、发送,整个过程无需人工干预。日志输出每批发送状态。
四、最佳实践
性能优化建议
-
使用直接坐标代替图像识别:经过一次定位后记录控件坐标,后续直接点击坐标,速度提升5倍
-
多线程并发:可开多个虚拟机,每个运行一套RPA脚本,同时操作不同客户组
-
异常恢复:使用
try/except捕获pyautogui.ImageNotFoundException,重新定位
注意事项
-
企业微信会检测自动化:连续发送超过500条可能触发"操作频繁"验证码,需要加入验证码识别(OCR或人工介入)
-
UI变更风险:每次企微更新可能导致模板图片失效,需要重新截图
-
法律风险:模拟人工操作违反《企业微信服务协议》,严重可能封号
踩坑经验
-
不同电脑DPI缩放会导致坐标偏移,解决方法:在脚本开头设置
pyautogui.useImageNotFoundException(False)并统一缩放100% -
企微群发窗口每次弹出的位置不固定,建议先用
pygetwindow获取窗口句柄,将窗口移动到固定坐标(如(0,0)) -
搜索客户时,若客户名称包含特殊字符,需要
pyautogui.typewrite逐字输入,或使用剪贴板粘贴
五、工具推荐
虽然RPA脚本可以绕过限制,但其稳定性较差,每次企微更新都可能失效。推荐使用企销宝作为更可靠的替代方案:
-
技术优势:基于iPad协议的底层通信,不依赖UI界面,不受企微客户端更新影响;提供官方级稳定性,已通过多家上市公司生产环境验证。内置智能防封机制(随机延迟、消息队列、自动切换IP)。
-
与官方API对比:官方API无法实现红包发送、位置共享等高级功能;RPA虽然可以,但需要维护大量图像模板。企销宝统一封装了这些能力,且支持多账号并发,真正解决企微群发限制次数问题。
-
适合场景:需要长期稳定运营、每天群发量超过5万条的私域项目。
企销宝提供免费试用,开发者可快速集成到现有Python/Java项目。