🤖 一个基于 pyautogui 和 win32gui 的双微信自动化机器人实现,支持个人微信和企业微信
免责声明: 本项目仅用于学习和技术交流目的。请遵守微信使用条款,不要用于商业用途或违法行为。
- 🔍 智能进程识别 - 自动发现个人微信和企业微信主进程,区分主程序和小程序进程
- 🪟 精确窗口定位 - 基于窗口句柄的稳定操作,支持多窗口管理
- 📨 双微信支持 - 同时支持个人微信(WeChat/Weixin)和企业微信(WXWork)
- 🎯 智能回退机制 - 个人微信不可用时自动切换企业微信发送
- 🛠️ 调试工具齐全 - 提供窗口检查器、进程选择器等调试工具
- 🔄 完整自动化 - 支持定时任务和批量操作,智能选择最佳发送方式
wxbot/
# 新架构 - 通用接口支持双微信
├── message_sender_interface.py # 消息发送器通用接口定义
├── wechat_sender_v3.py # 个人微信发送器(接口版)
├── wxwork_sender.py # 企业微信发送器(人性化版本)
├── wxwork_sender_robust.py # 企业微信发送器(独立robust版本)
├── wxwork_adapter.py # 企业微信适配器(接口兼容)
├── human_like_operations.py # 人性化操作模块(反风控核心)
├── auto_daily_report_v2.py # 自动化系统v2.0 - 支持双微信智能切换
# 传统实现(向后兼容)
├── direct_sender.py # 核心发送器 - 基于窗口句柄直接操作
├── window_inspector.py # 窗口检查器 - 调试和窗口信息获取
├── auto_daily_report.py # 自动化系统v1.0 - 仅支持个人微信
├── wechat_sender_v2.py # 传统个人微信发送器
├── storage_system.py # 存储统计系统
├── auto_report_config.json # 配置文件 - 支持双微信配置
├── run_daily_auto.bat # Windows批处理启动脚本
└── README.md # 项目文档
- Python 3.7+
- Windows 10/11
- 个人微信 PC 版 和/或 企业微信 PC 版
pip install pyautogui pyperclip pywin32 psutil# 查看发送器状态
python auto_daily_report_v2.py status
# 测试所有发送器
python auto_daily_report_v2.py test
# 执行完整自动化流程(智能选择微信)
python auto_daily_report_v2.py run# 测试个人微信
python wechat_sender_v3.py test
python wechat_sender_v3.py send [群名]
# 测试企业微信
python wxwork_sender.py test
python wxwork_sender.py send [群名]
# 手动选择企业微信窗口(调试用)
python wxwork_sender.py manual# 智能查找微信主进程和窗口
python window_inspector.py findwechat
# 发送测试消息
python direct_sender.py test <窗口句柄>
# 执行单微信自动化流程
python auto_daily_report.py run基于统一接口的双微信支持,提供智能回退机制:
from auto_daily_report_v2 import AutoReportSystemV2
system = AutoReportSystemV2()
# 初始化所有可用发送器
system.initialize_senders()
# 智能选择最佳发送器并发送
system.run_full_automation()核心特点:
- 🤖 智能发送器选择 - 根据配置优先级和可用性自动选择
- 🔄 自动回退机制 - 个人微信不可用时自动切换企业微信
- ⚙️ 统一配置管理 - 单一配置文件管理所有发送器
- 🔍 自动窗口识别 - 无需手动配置窗口句柄
- 📊 详细状态报告 - 提供发送器状态和调试信息
专门针对企业微信(WXWork.exe)优化:
from wxwork_sender import WXWorkSender
sender = WXWorkSender()
# 发送消息到企业微信群聊
success = sender.auto_send_daily_report("蓝光统计")特点:
- ✅ 精确识别WeWorkWindow主窗口
- ✅ 强制激活和置顶窗口
- ✅ 智能输入框定位
- ✅ 支持手动窗口选择调试
稳定的个人微信发送方案,直接使用窗口句柄操作:
from direct_sender import DirectSender
sender = DirectSender()
# 发送消息到指定窗口
hwnd = 12345678 # 目标窗口句柄
message = "Hello, World!"
success = sender.send_message_to_window(hwnd, message)特点:
- ✅ 无需配置坐标
- ✅ 自动点击输入框区域
- ✅ 多种发送方式备选
- ✅ 详细的执行日志
用于获取窗口信息和调试:
# 交互式点击获取窗口信息(推荐)
python window_inspector.py click
# 然后将鼠标移到目标窗口,按 Ctrl+Alt+I 获取信息
# 智能查找微信进程
python window_inspector.py findwechat完整的自动化解决方案:
from auto_daily_report import AutoReportSystem
system = AutoReportSystem()
# 添加目标群聊
system.add_group("技术交流群")
# 更新窗口句柄
system.update_target_windows()
# 发送自定义内容
# (需要先准备 report 文件或修改代码)auto_report_config.json 新格式支持双微信:
{
"version": "2.0",
"default_sender": "wechat",
"sender_priority": ["wechat", "wxwork"],
"fallback_enabled": true,
"senders": {
"wechat": {
"type": "wechat",
"enabled": true,
"process_names": ["WeChat.exe", "Weixin.exe", "wechat.exe"],
"default_group": "存储统计报告群",
"target_groups": [
{
"name": "技术交流群",
"hwnd": null,
"enabled": true
}
]
},
"wxwork": {
"type": "wxwork",
"enabled": true,
"process_names": ["WXWork.exe", "wxwork.exe"],
"default_group": "蓝光统计",
"target_groups": [
{
"name": "蓝光统计",
"hwnd": null,
"enabled": true
}
]
}
},
"message_settings": {
"add_timestamp": true,
"add_sender_info": true,
"format_style": "emoji"
}
}配置说明:
default_sender: 默认使用的发送器类型sender_priority: 发送器优先级顺序fallback_enabled: 启用回退机制(推荐)- 支持自动配置迁移,旧配置会自动升级
我们的反风控系统通过以下技术手段模拟真人操作:
from human_like_operations import HumanLikeOperations
human_ops = HumanLikeOperations()
# 正态分布随机延迟,避免规律性
human_ops.human_delay(base_time=1.0, variance=0.3)# 避免直线移动,使用缓动函数模拟真实轨迹
human_ops.human_move_to(x, y, duration=随机时长)
# 自动添加 ±2 像素随机抖动# 模拟阅读和思考停顿
human_ops.simulate_reading_pause() # 1±0.8秒随机停顿
# 30%概率的无意识鼠标移动
human_ops.random_small_move()- ❌ 旧版:
🤖 此消息由自动化系统发送 💻 发送器: WXWorkSender - ✅ 新版:
今日存储统计情况(09月15日 14:32): ... 各单位请及时关注存储使用情况。
| 风控检测点 | 我们的对策 |
|---|---|
| 规律性时间间隔 | 正态分布随机延迟 |
| 直线鼠标轨迹 | 缓动曲线 + 随机抖动 |
| 机械点击模式 | 随机小幅移动 + 自然停顿 |
| 固定操作顺序 | 思考停顿 + 随机化操作 |
| 自动化消息特征 | 完全自然化的消息格式 |
| 剪贴板频繁使用 | 智能选择输入方式 |
修改 message_sender_interface.py 中的消息格式化函数:
def format_custom_message(self, content):
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
formatted_content = f\"\"\"📢 自动消息
🕐 发送时间: {timestamp}
{content}
🤖 由 wxbot 自动发送\"\"\"
return formatted_content- 打开"任务计划程序"
- 创建基本任务
- 设置触发器(每日、每周等)
- 操作选择"启动程序":
run_daily_auto.bat
import schedule
import time
def send_daily_message():
# 你的发送逻辑
pass
# 每天上午 9 点执行
schedule.every().day.at(\"09:00\").do(send_daily_message)
while True:
schedule.run_pending()
time.sleep(60)# 批量发送到多个群聊
target_windows = [12345678, 23456789, 34567890]
message = \"批量消息内容\"
sender = DirectSender()
for hwnd in target_windows:
sender.send_message_to_window(hwnd, message)
time.sleep(2) # 避免发送过快-
找不到微信进程
- 确保微信已启动
- 尝试以管理员权限运行
- 检查进程名称(Weixin.exe 或 WeChat.exe)
-
窗口句柄无效
- 窗口可能已关闭或最小化
- 使用
window_inspector.py重新获取句柄 - 确保目标群聊/联系人窗口已打开
-
消息发送失败
- 检查输入框是否获得焦点
- 尝试不同的发送快捷键
- 使用调试模式检查点击位置
-
编码问题
- 确保 Python 文件使用 UTF-8 编码
- Windows 控制台可能需要设置编码
# 详细的窗口信息
python direct_sender.py info <窗口句柄>
# 测试点击位置(不发送消息)
python direct_sender.py click <窗口句柄>
# 获取调试信息
python auto_daily_report.py debug- 进程识别: 使用
psutil查找微信进程,按内存使用量排序选择主进程 - 窗口定位: 通过
win32gui枚举窗口,根据进程 ID 筛选目标窗口 - 消息发送: 使用
pyautogui模拟键盘操作,通过剪贴板传递中文内容 - 稳定性保证: 多种发送方式备选,详细的错误处理和重试机制
如果需要扩展功能,建议的扩展点:
- 消息类型: 支持图片、文件发送
- 群聊管理: 自动加群、踢人等
- 消息监听: 接收消息并自动回复
- 界面优化: 添加 GUI 界面
欢迎提交 Issue 和 Pull Request!
- Fork 本项目
- 创建特性分支:
git checkout -b feature/新功能 - 提交更改:
git commit -am '添加新功能' - 推送分支:
git push origin feature/新功能 - 提交 Pull Request
- ✅ 支持企业微信(WXWork)发送
- ✅ 双微信智能回退机制
- ✅ 统一发送器接口架构
- ✅ 自动窗口识别和激活
- ✅ 反风控人性化操作系统
- ✅ 零缓存实时重启检测
- ✅ 曲线鼠标轨迹模拟
- ✅ 随机延迟和操作随机化
- ✅ 消息自然化处理
- 支持图片和文件发送
- 添加消息接收监听功能
- 创建简单的 GUI 界面
- 支持钉钉、飞书等其他企业IM
- 支持 Linux 和 macOS
- 添加更多的微信版本适配
- 性能优化和内存使用改进
- 增强反检测机制(OCR识别、图像匹配)
- 使用风险: 自动化操作可能违反微信使用条款,存在封号风险
- 法律责任: 请遵守当地法律法规,不得用于非法用途
- 商业使用: 本项目仅用于学习和技术交流,商业使用需要谨慎评估
- 适度使用: 即使有反风控机制,也要保持合理的使用频率
- 行为模拟: 尽量模拟正常的工作时间和发送频率
- 内容自然: 避免发送明显的测试内容或重复内容
- 监控响应: 注意观察账号状态,如有异常立即停用
- 版本兼容: 本项目基于特定微信版本开发,新版本可能需要适配
- 个人微信: 支持 WeChat.exe、Weixin.exe
- 企业微信: 支持 WXWork.exe,基于 WeWorkWindow 窗口类
- 系统权限: 某些操作可能需要管理员权限
- 网络环境: 确保网络连接稳定,避免操作失败
- 双微信使用:
- 智能回退机制确保至少有一种微信可用
- 企业微信窗口识别可能因版本差异需要调试
- 建议先使用手动选择模式确认窗口句柄
- 人性化配置:
- 保持随机延迟开启状态
- 不要禁用人性化操作模块
- 定期更新反风控策略
本项目采用 MIT 许可证。详见 LICENSE 文件。
感谢以下开源项目的启发和支持:
如有问题或建议,欢迎通过以下方式联系:
- 📧 邮箱: [email protected]
- 💬 微信: 364345866
- 🐙 GitHub: jxyk2007
- 🧠 人性化操作模拟: 完全模拟真人操作行为,避免机器特征
- 🎲 随机延迟系统: 正态分布随机延迟,消除规律性操作痕迹
- 🖱️ 智能鼠标轨迹: 曲线移动+随机抖动,告别机械直线移动
- ⏰ 自然时间间隔: 模拟真人思考、阅读、操作的自然停顿
- 💬 消息自然化: 去除所有自动化标识,完全像真人发送的工作报告
- 🔀 操作随机化: 30%概率无意识鼠标移动,增加真实性
- 🔄 实时窗口检测: 每次操作都重新检测,完全解决企业微信重启问题
- 🎯 多策略窗口匹配: 3层识别策略确保找到正确的企业微信窗口
- 💪 强力激活机制: 多重激活方式,确保窗口获得焦点
- 🧬 自愈能力: 检测到重启后自动重新连接,无需人工干预
- 🎯 统一接口设计:
MessageSenderInterface抽象基类 - 🔄 智能回退机制: 个人微信 ↔ 企业微信无缝切换
- ⚙️ 配置自动迁移: 旧配置自动升级到新格式
- 🪟 精确窗口识别: 支持
WeWorkWindow企业微信主窗口
- 🔍 进程识别: 智能识别
WXWork.exe进程,选择内存最大的主进程 - 🪟 窗口激活: 强制显示、置顶、恢复最小化窗口
- 📍 输入框定位: 基于窗口位置计算输入区域
- 🛠️ 调试工具: 手动选择窗口、窗口信息展示
- 📊 状态监控: 实时显示发送器可用状态
- 🧪 测试功能: 一键测试所有发送器
- 📝 详细日志: 完整的操作和错误日志
- 🔧 向后兼容: 保持对旧版本的完全兼容
⭐ 如果这个项目对你有帮助,请给个 Star 支持一下!