• 用python实现自动回复QQ消息——不到60行


    最近在看测试相关的内容,发现自动化测试很好玩,就决定做一个自动回复QQ消息的脚本(我很菜)


    1、需要安装的模块

    这个自动化脚本需要用到3个模块,如果要使用这个脚本的朋友,自己的python中可能没有安装这些模块,所以就可以安装一下

    第1个模块:pyautogui
    这个模块主要是用来让程序自动控制鼠标和键盘的一系列操作来达到自动化测试的目的。
    在cmd下输入安装命令:pip install pyautogui


    第2个模块:pyperclip
    这个模块主要用于复制剪贴板里的内容,向剪贴板写入内容
    在cmd下输入安装命令:pip install pyperclip

    第3个模块:psutil
    psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息
    在cmd下输入安装命令:pip install psutil


    2、整体逻辑

    • 首先我们需要判断QQ是否处于登录状态,如果没有处于登录状态,我们需要启动QQ,再进行登录。
    • 轮询检测是否有人发送消息,如果有人发送消息,则打开对应的会话框
    • 自动输入回复的内容并进行回复
    • 关闭会话框,再进行检测

    如何判断QQ是否处启动?

    我们知道QQ如果需要运行,首先操作系统给它分配资源,资源中就包括一个叫进程pid的内容,pid是进程的唯一标识,pid和进程是1:1的关系。通过pid就可以知道进程的名字,判断这个名字是否与"QQ.exe"相等就可以知道QQ是否启动

    #获取全部进程的pid
    pl = psutil.pids()
    	for pid in pl:
        # 判断QQ.exe是否运行
        if psutil.Process(pid).name() == "QQ.exe":
    

    如果QQ没有启动,需要启动QQ,并登录
    我们平时启动QQ的时候,首先需要找到QQ的快捷方式,然后双击,等到QQ的登录界面出现后,再点击登录或者按回车键(“enter”)。
    自动化也是一样的。
    os模块中有一个方法os.startfile(dir),参数就是"QQ.exe"在磁盘中的存放位置,登录界面出现后,我们这里采用按回车(“enter”)的方式进行登录

    os.startfile(QQ_dir)
    time.sleep(3)
    gui.write(["enter"])
    time.sleep(5)
    

    QQ成功登录后(我的默认是免打扰),在桌面的右下角会出现QQ的小图标
    在这里插入图片描述

    如果此时有人发来消息,则会有提示符
    在这里插入图片描述

    因此最开始,就需要对这个QQ消息提示符进行截图,通过判断桌面这个图标是否存在,来判断是否有消息,如果有消息,我们只需要点击这个QQ这个图标,就能弹出对话框

    if gui.locateOnScreen("./image/receive_message1.png", confidence=0.8) is not None:
    	gui.click(gui.center(gui.locateOnScreen("./image/receive_message1.png", confidence=0.8)))
    

    弹出对话框后,默认是处于输入状态的。需要用到pyperclip.copy(“需要发送的内容”)剪切内容到粘贴板上,再使用pyautogui.hotkey(“ctrl”, “v”)进行粘贴,此时内容就已经在输入框中,按下"enter"和"esc"(pyautogui.write([“enter”, “esc”]))进行发送,然后关闭对话框

    lip.copy("自动回复")
    gui.hotkey("ctrl", "v")
    gui.write(["enter", "esc"])
    

    不过在我是将我需要发送的数据存放在了一个文本里,每次都随机选择一个发送

    3、代码实现

    import os
    import random
    
    import psutil
    import pyautogui as gui
    import pyperclip as lip
    import time
    
    #所有的文件路径都需要自己去修改
    QQ_dir = r'D:\Bin\QQScLauncher.exe'
    
    def Proc_exist():
        pl = psutil.pids()
        for pid in pl:
            # 判断QQ.exe是否运行
            if psutil.Process(pid).name() == "QQ.exe":
                return True
        return False
    
    
    def QQ_login():
        # 启动指定路径下的QQ
        os.startfile(QQ_dir)
        time.sleep(3)
        gui.write(["enter"])
        time.sleep(5)
    
    
    def Readfile():
        with open("./image/text.txt", 'r', encoding="UTF-8") as f:
            filetxt = f.readlines()
        return filetxt
    
    def Sendmessage(filetxt):
        filetxtlen = len(filetxt)
        #随机数取0到len-1
        ran = random.randint(0, filetxtlen-1)
        #剪切内容
        lip.copy(filetxt[ran])
        #粘贴
        gui.hotkey("ctrl", "v")
        gui.write(["enter", "esc"])
    
    
    def Polling():
        if Proc_exist() == False:
            QQ_login()
    
        while True:
            # confidence=0.8是匹配精确度,需要安装opencv   pip install opencv-python
            #判断是否来消息
            if gui.locateOnScreen("./image/receive_message1.png", confidence=0.8) is not None:
            	# 点击图片在屏幕中出现的中间位置,就能弹出对话框
            	gui.click(gui.center(gui.locateOnScreen("./image/receive_message1.png", confidence=0.8)))
                time.sleep(2)
                # 判断是否有消息漫游验证,如果有,把它关掉
                if gui.locateOnScreen("./image/img.png", confidence=0.8) is not None:
                    location = gui.center(gui.locateOnScreen("./image/img.png"))
                    gui.click(location.x+200, location.y)
                time.sleep(2)
                Sendmessage(filetxt)
    
    # 将text.txt的数据读到列表中
    filetxt = Readfile()
    Polling()
    

    if gui.locateOnScreen("./image/img.png", confidence=0.8) is not None的意思:

    弹出对话框后可能会存在消息漫游安全验证,所以需要判断,如果存在,则需要关掉验证,再发送消息

    在这里插入图片描述

    receive_message1.png:
    在这里插入图片描述

    img.png:
    在这里插入图片描述


    使用的时候记得把图片路径换成自己的,记得QQ开免打扰,开了免打扰好像才有消息提示的黄色框

  • 相关阅读:
    204、你知道无线工程项目中无线AP有五种组网模式吗
    [WPF]浅析依赖属性(DependencyProperty)
    【shell】初识shell脚本语言
    力扣429.N叉树的层序遍历(Java BFS解法)
    文件上传漏洞(2), 文件上传实战绕过思路, 基础篇
    dockerfile用ENTRYPOINT好还是用CMD好
    Jenkins 配置邮件
    016 Spring Boot + Vue 图书管理系统
    无人机+自组网:2U机架车载式自组网电台技术详解
    程序过程分析——从编译到执行
  • 原文地址:https://blog.csdn.net/qq_56044032/article/details/127125748