教你用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開免打擾,開瞭免打擾好像才有消息提示的黃色框

總結

到此這篇關於用python實現自動回復QQ消息(不到60行)的文章就介紹到這瞭,更多相關python自動回復QQ消息內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: