操作微信發送消息
安裝
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("要發送的人民或者群聊名稱", "要發送的內容")
本文來自博客園,作者:羊駝之歌,轉載請注明原文鏈接:http://www.rzrgm.cn/shijieli/p/18933034

浙公網安備 33010602011771號