实现从接口获取发送消息,用  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()


以上,使用了微信快捷键方式,实现发送消息到指定好友的功能,用以自动通知好友等业务场景。