操作微信发送消息
安装
pip install wxauto
pip install flask
原理
需要 windows 环境下, 登录微信后
启动脚本服务, flask web 接受 post 的 发送信息请求操作 微信客户端进行发送
不需要解析微信协议,操作方式较为安全
脚本
服务脚本
from wxauto import WeChat import win32gui import os from flask import Flask, request, jsonify # 动态匹配微信窗口类名并获取句柄 def find_wechat_window(): class_names = ["WeChatMainWndForPC", "WeChatMainWndForStore"] for name in class_names: hwnd = win32gui.FindWindow(name, None) if hwnd != 0: print(f"找到微信窗口句柄: {hwnd}") return hwnd print("未找到微信窗口,请检查窗口状态或类名") return None # 初始化微信操作对象 wechat_hwnd = find_wechat_window() if wechat_hwnd is None: raise RuntimeError("未能找到微信窗口,程序终止") wx = WeChat() # 创建Flask应用 app = Flask(__name__) @app.route('/api/sendmsg', methods=['POST']) def send_message(): """ 接收外部POST请求并发送消息到指定联系人。 请求必须为JSON格式,包含'message'和'name'字段。 """ if 'name' not in request.form: return jsonify({'error': 'No name part'}), 400 if 'message' not in request.form: return jsonify({'error': 'No message part'}), 400 name = request.form['name'] message = request.form['message'] try: # 发送消息 wx.SendMsg(msg=message, who=name) return jsonify({ "status": "success" }), 200 except Exception as e: # 捕获异常并返回错误信息 return jsonify({ "error": "send message failed", "details": str(e) }), 500 @app.route('/api/sendfile', methods=['POST']) def send_file(): """ 接收文件上传并发送到指定微信联系人 请求格式:multipart/form-data 参数: - files: 文件列表(必须) - name: 目标联系人(必须) """ # 验证必填参数 if 'file' not in request.files: return jsonify({'error': 'No file part'}), 400 if 'name' not in request.form: return jsonify({'error': 'No name part'}), 400 name = request.form['name'] # 获取上传的文件 file = request.files.get('file') file_path = receive_wechat_file(file) try: wx.SendFiles(filepath=file_path, who=name) return jsonify({ "status": "success", }), 200 except Exception as e: # 清理已上传文件 os.remove(file_path) return jsonify({"error": "send file failed", "details": str(e)}), 500 def receive_wechat_file(file): if file: # 下载文件 dir = 'files' filename = file.filename filename = filename.replace('/', '_') # 将斜杠替换为下划线 filename = filename.replace('\\', '_') # 将反斜杠替换为下划线 filename = filename.replace('..', '_') # 将连续的点号替换为下划线 # filename = filename.replace('.', '_') # 将点号替换为下划线 if not os.path.exists(dir): os.makedirs(dir) file_path = os.path.join(dir, filename) print(file_path) file.save(file_path) return file_path return False if __name__ == '__main__': # 启动Flask服务,监听所有网络接口 app.run(host='0.0.0.0', port=80)
发送信息脚本
import requests def send_message(name, message): """发送消息到指定API""" url = "http://127.0.0.1/api/sendmsg" data = {"message": message, "name": name} try: response = requests.post(url, data=data) if response.status_code == 200: print("请求成功,返回数据:", response.json()) else: print(f"请求失败,状态码:{response.status_code},错误信息:{response.text}") except Exception as e: print(f"网络请求异常:{str(e)}") if __name__ == '__main__': send_message("要发送的人民或者群聊名称", "要发送的内容")
本文来自博客园,作者:羊驼之歌,转载请注明原文链接:https://www.cnblogs.com/shijieli/p/18933034

浙公网安备 33010602011771号