实现从接口获取发送消息,用 pyautogui和pyperclip组件实现发送消息。
需安装如下组件:
pip install pyautogui
pip install pyperclip
#网络请求组件
pip install requests
# 微信自动回复工具
# 安装PyAutoGUI与Pyperclip
# 在命令行中使用pip命令安装PyAutoGUI和Pyperclip库:
# pip install pyautogui
# pip install pyperclip
# 网络请求组件
# pip install requests
# 打包exe工具
# pip install pyinstaller
# 打包成exe指令
# pyinstaller AutoReply.spec
# pyinstaller --onefile --icon=logo.ico AutoReply.py
import sys
import time
# 引入模块操作快捷键
import pyautogui
# 引入模块操作剪切板
import pyperclip
import requests
import json
from datetime import datetime
import logging
from logging.handlers import TimedRotatingFileHandler
# 获取待发送消息
def getWxMessage():
try:
url = f"{baseUrl}/dapi/app/notes/getlist"
response = requests.get(url) # 使用get方法发起请求
print(response.content.decode("utf-8")) # 输出请求状态码
logInfo(f"getWxMessage{response.content.decode('utf-8')}")
# 输出请求结果
return json.loads(response.content.decode("utf-8"))["data"]
except Exception as ex:
logError(f"获取消息异常:{str(ex)}", ex)
# 更新消息状态
def updateWxMessageStatus(id):
try:
url = f"{baseUrl}/dapi/app/notes/updatestatus"
headers = {
"content-type": "application/x-www-form-urlencoded"
}
payload = "id=" + str(id)
logInfo(f"updateWxMessageStatus-payload={payload}")
response = requests.post(url, data=payload, headers=headers) # 使用post发起请求
except Exception as ex:
logError(f"更新消息状态异常:{str(ex)}", ex)
# 主线程
def main():
while True: # 循环等待消息
try:
time.sleep(sleepTime)
# 去服务器获取待发送消息
data1 = getWxMessage()
if not data1:
continue
logInfo(f"待发送消息{data1}")
for item in data1:
time.sleep(1)
# 调用发送消息函数
logInfo(
f"--------------------------------------------------------------"
)
logInfo(f"当前发送消息 {item}")
send_message(item["nickname"], item["content"])
# 调用接口 更新消息发送状态
updateWxMessageStatus(item["id"])
except Exception as ex:
logError(f"main消息异常:{str(ex)}", ex)
# sys.exit(0)
# 发送消息
def send_message(target, message, delay=1):
try:
time.sleep(delay)
# 打开微信窗口
pyautogui.hotkey("ctrl", "alt", "w")
time.sleep(delay)
# 使用快捷键ctrl+f定位到微信搜索栏
pyautogui.hotkey("ctrl", "f")
time.sleep(delay)
# 清空剪切板并将发送对象写入剪切板
pyperclip.copy("")
pyperclip.copy(target)
# 使用快捷键ctrl+v粘贴搜索内容
pyautogui.hotkey("ctrl", "v")
time.sleep(delay)
# 按下回车键 打开搜索出的目标
pyautogui.press("enter")
time.sleep(delay)
# 清空剪切板并将待发送信息写入剪切板
pyperclip.copy("")
pyperclip.copy(message)
# 使用快捷键ctrl+v粘贴待发送信息
pyautogui.hotkey("ctrl", "v")
time.sleep(delay)
# 按下回车键发送消息
pyautogui.press("enter")
# log
logInfo(f"发送成功{message}")
# 回到桌面
time.sleep(delay)
pyautogui.hotkey("win", "d")
time.sleep(delay)
except Exception as ex:
print(f"发送微信消息异常:{str(ex)}")
print(ex)
logError(f"发送微信消息异常111:", ex)
# 打印日志信息
def logInfo(msg):
logger.info(f"{msg}")
print(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}:{msg}")
# 打印错误信息
def logError(msg, ex):
logger.error(f"{msg}-{str(ex)}")
print(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}:{msg}")
def setup_logger():
# 日志文件路径,包含日期
log_filename = "logs/%s.log" % time.strftime("%Y-%m-%d")
# 创建TimedRotatingFileHandler,每天分割日志
handler = TimedRotatingFileHandler(
log_filename, when="midnight", interval=1, backupCount=7
)
# 设置日志格式
formatter = logging.Formatter(
"%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
handler.setFormatter(formatter)
# 创建logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logger.addHandler(handler)
return logger
# 设置logger
logger = setup_logger()
# 接口基地址
baseUrl = ""
# 睡眠时间
sleepTime = 2
if __name__ == "__main__":
with open("config.json", "r") as file:
config = json.load(file)
baseUrl = config["settings"]["baseUrl"]
sleepTime = config["settings"]["sleepTime"]
logInfo(f"程序启动了;接口地址={baseUrl}")
main()
以上,使用了微信快捷键方式,实现发送消息到指定好友的功能,用以自动通知好友等业务场景。