首頁 > 軟體

教你用python實現自動回覆QQ訊息(不到60行)

2022-10-18 14:01:11

前言

最近在看測試相關的內容,發現自動化測試很好玩,就決定做一個自動回覆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:BinQQScLauncher.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訊息內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com