教你用python实现自动回复QQ消息(不到60行)

作者:你好,冯同学 时间:2021-05-17 06:19:20 

前言

最近在看测试相关的内容,发现自动化测试很好玩,就决定做一个自动回复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的小图标

教你用python实现自动回复QQ消息(不到60行)

如果此时有人发来消息,则会有提示符

教你用python实现自动回复QQ消息(不到60行)

因此最开始,就需要对这个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的意思:

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

教你用python实现自动回复QQ消息(不到60行)

receive_message1.png:

教你用python实现自动回复QQ消息(不到60行)

img.png:

教你用python实现自动回复QQ消息(不到60行)

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

来源:https://blog.csdn.net/qq_56044032/article/details/127125748

标签:python,自动回复,qq消息
0
投稿

猜你喜欢

  • Python中的np.argmin()和np.argmax()函数用法

    2021-09-10 16:00:51
  • 对Python的zip函数妙用,旋转矩阵详解

    2023-06-09 12:42:45
  • 实现一个获取元素样式的函数getStyle

    2009-02-10 10:37:00
  • PyTorch读取Cifar数据集并显示图片的实例讲解

    2021-03-24 11:07:55
  • 浅谈sklearn中predict与predict_proba区别

    2023-11-08 03:53:45
  • 关于你不想知道的所有Python3 unicode特性

    2022-03-03 13:06:40
  • python字符串的常用操作方法小结

    2023-11-29 03:01:37
  • Python打包后的exe还原成.py的实现步骤

    2022-08-10 21:57:11
  • 基于并发服务器几种实现方法(总结)

    2021-12-30 16:18:09
  • Python中栈、队列与优先级队列的实现方法

    2023-11-03 02:16:53
  • 解决golang编译提示dial tcp 172.217.160.113:443: connectex: A connection attempt failed(推荐)

    2023-07-16 04:24:49
  • pandas的apply函数用法详解

    2022-05-09 11:41:16
  • Python写入CSV文件的方法

    2021-08-21 19:09:44
  • 利用PHP自动生成印有用户信息的名片

    2023-09-10 22:30:56
  • 基于python requests selenium爬取excel vba过程解析

    2021-06-18 23:47:09
  • CSS兼容IE6,IE7,FF的技巧

    2010-04-01 12:34:00
  • 详解Python中的List

    2023-11-20 05:37:39
  • JS重载实现方法分析

    2023-10-07 08:09:04
  • 详解win10下pytorch-gpu安装以及CUDA详细安装过程

    2023-07-01 07:21:36
  • 利用python Selenium实现自动登陆京东签到领金币功能

    2021-11-09 12:00:33
  • asp之家 网络编程 m.aspxhome.com