記事ディレクトリ
最近、テスト関連のコンテンツを見ていて、自動テストが非常に興味深いことがわかったので、QQ メッセージに自動的に応答するスクリプトを作成することにしました (私は非常に得意です)。
1. インストールが必要なモジュール
この自動化スクリプトは 3 つのモジュールを使用する必要があります. このスクリプトを使用する場合は、これらのモジュールが Python にインストールされていない可能性があるため、インストールしてください.
最初のモジュール:このモジュールは主に、自動テストの目的を達成するために、プログラムがマウスとキーボードの一連の操作を自動的に制御できるようにするために使用されます。cmd の下にインストール コマンドを入力します: pip install pyautoguipyautogui
2 番目のモジュール:このモジュールは、主にクリップボードの内容をコピーし、内容をクリップボードに書き込むために使用されます。cmdの下にインストール コマンドを入力します: pip install pyperclippyperclip
3 番目のモジュール: psuti
l 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 キー (「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("content to send") を使用してコンテンツをペーストボードに切り取り、次に 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:
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()