教你用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的小图标
如果此时有人发来消息,则会有提示符
因此最开始,就需要对这个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开免打扰,开了免打扰好像才有消息提示的黄色框
来源:https://blog.csdn.net/qq_56044032/article/details/127125748
猜你喜欢
- MySQL中SQL Mode的查看与设置MySQL可以运行在不同的模式下,而且可以在不同的场景下运行不同的模式,这主要取决于系统变量 sql
- 在Python个人博客程序开发实例框架设计中,我们已经完成了 数据库设计、数据准备、模板架构、表单设计、视图函数设计、电子邮件支持 等总体设
- 例如:var json = eval('('+ret+')'); 假设我们在服务器端使用php的encode
- MySQL开启通用查询日志general log mysql打开general log之后,所有的查询语句都可以在general log文件
- 语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) <BR> 例
- GO通道和 sync 包的分享我们一起回顾一下上次分享的内容:GO协程同步若不做限制的话,会产生数据竞态的问题我们用锁的方式来解决如上问题,
- 今天又帮女朋友处理了一下,她的实验数据,因为python是一年前经常用,最近找工作,用的是c,c++,python的有些东西忘记了,然后就一
- 解决大于5.7版本mysql的分组报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated原因:MySQL 5.7.5和up实现了对功能依赖的检测。如果启用了only_full_group_by SQL模式(在默认情况下是这样),
- 一、Shutil 模块shutil其实也就是shell模块。其中包含一些函数,可以让我们在python程序中复制、移动、改名和删除文件。1.
- apache对php的支持是通过apache的mod_php5模块来支持的,这点与nginx不同。nginx是通过第三方的fastcgi处理
- 在mysql数据库中,当我们需要模糊查询的时候 ,我们会使用到通配符。首先我们来了解一下2个概念,一个是操作符,一个是通配符。操作符like
- 本文实例讲述了PHP日志LOG类定义与用法。分享给大家供大家参考,具体如下:<?php/*** PHP log 类 */class C
- 数据库,网站运营的基础,网站生存的要素,不管是个人用户还是企业用户都非常依赖网站数据库的支持,然而很多别有用心的攻击者也同样非常&l
- 在我们的`` current_datetime`` 视图范例中,尽管内容是动态的,但是URL ( /time/ )是静态的。 在 大多数动态
- 获取一个类的所有子类def itersubclasses(cls, _seen=None): "
- python有很多有趣的库,其中wxpy是连接微信的接口,具体可以查看官方文档。可以实现自动操作,wxpy 支持 Python 3.4-3.
- --重命名表 rename table t_softwareport to software_port; --建立外键 alter tabl
- 新建label与button,并设置位置(grid)import tkinter as tkroot = tk.Tk()label = tk
- 1.什么是虚拟DOM 以前M的命令式操作DOM即使用jQuery操作DOM节点,随着状态的增多,DOM的操作就会越来越频繁,程序的
- >>什么是RPCRPC 的全称是 Remote Procedure Call 是一种进程间通信方式。它允许程序调用另一个地址空间