Directorio de artículos
Recientemente, estuve mirando contenido relacionado con las pruebas y descubrí que las pruebas automatizadas son muy interesantes, así que decidí hacer un script que responda automáticamente a los mensajes QQ (soy muy bueno en eso)
1. Módulos que necesitan ser instalados
Este script de automatización necesita usar módulos 3. Si desea usar este script, es posible que no tenga estos módulos instalados en su python, por lo que puede instalarlo.
El primer módulo: este módulo se usa principalmente para permitir que el programa controle automáticamente una serie de operaciones del mouse y el teclado para lograr el propósito de la prueba automatizada. Ingrese el comando de instalación en cmd: pip install pyautoguipyautogui
El segundo módulo: este módulo se usa principalmente para copiar el contenido del portapapeles y escribir el contenido en el portapapeles Ingrese el comando de instalación en cmd: pip install pyperclippyperclip
El tercer módulo: psuti
l
psutil es una biblioteca multiplataforma que puede obtener fácilmente información sobre el proceso en ejecución y la utilización del sistema (incluida la CPU, la memoria, el disco, la red, etc.)
del sistema Ingrese el comando de instalación en cmd: pip install psutil
2. Lógica general
- En primer lugar, debemos juzgar si QQ está en el estado de inicio de sesión. Si no está en el estado de inicio de sesión, debemos iniciar QQ y luego iniciar sesión.
- Sondeo para detectar si alguien envía un mensaje, si alguien envía un mensaje, abra el cuadro de diálogo correspondiente
- Ingrese automáticamente el contenido de la respuesta y responda
- Cierre el cuadro de diálogo y vuelva a probar
¿Cómo juzgar si QQ está activado?
Sabemos que si QQ necesita ejecutarse, el sistema operativo primero le asigna recursos. Los recursos incluyen un contenido llamado proceso pid. pid es el identificador único del proceso, y la relación entre pid y proceso es 1:1. Puede conocer el nombre del proceso a través de pid, y al juzgar si el nombre es igual a "QQ.exe", puede saber si QQ se inició
#获取全部进程的pid
pl = psutil.pids()
for pid in pl:
# 判断QQ.exe是否运行
if psutil.Process(pid).name() == "QQ.exe":
Si QQ no se inicia, debe iniciar QQ e iniciar sesión
. Cuando generalmente iniciamos QQ, primero debemos encontrar el acceso directo de QQ, luego hacer doble clic, esperar hasta que aparezca la interfaz de inicio de sesión de QQ y luego hacer clic para iniciar sesión o presione la tecla Enter (“enter”).
La automatización es la misma.
Hay un método os.startfile(dir) en el módulo os. El parámetro es la ubicación de almacenamiento de "QQ.exe" en el disco. Después de que aparezca la interfaz de inicio de sesión, iniciamos sesión presionando "enter".
os.startfile(QQ_dir)
time.sleep(3)
gui.write(["enter"])
time.sleep(5)
Después de que QQ haya iniciado sesión correctamente (mi opción predeterminada es No molestar), aparecerá un pequeño icono de QQ en la esquina inferior derecha del escritorio.
Si alguien envía un mensaje en este momento, habrá un mensaje
Por lo tanto, al principio, debemos tomar una captura de pantalla del aviso del mensaje QQ y juzgar si hay noticias juzgando si existe el icono del escritorio.Si hay noticias, solo tenemos que hacer clic en el icono QQ para que aparezca un cuadro de diálogo. caja.
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)))
Después de que aparece el cuadro de diálogo, está en el estado de entrada de forma predeterminada. Debe usar pyperclip.copy("contenido para enviar") para cortar el contenido en la mesa de trabajo y luego usar pyautogui.hotkey("ctrl", "v") para pegar, el contenido ya está en el cuadro de entrada, presione Luego "enter" y "esc"(pyautogui.write(["enter", "esc"])) para enviar, luego cierre el diálogo
lip.copy("自动回复")
gui.hotkey("ctrl", "v")
gui.write(["enter", "esc"])
Sin embargo, cuando almaceno los datos que necesito enviar en un mensaje de texto, selecciono uno al azar para enviar cada vez.
3. Implementación del código
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:
time.sleep(1)
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()