需求描述
需要使用 Python 設(shè)計一個 QQ 的批量自動登錄的腳本, 查了一些資料, 通過調(diào) API 實現(xiàn)該功能。
準(zhǔn)備工作
代碼主要使用了幾個常用的 API
- win32gui
- win32api
- win32con
- PyUserInput
前置需要安裝 PyHook,否則會報錯
- pykeyboard
- pymouse
- 參考鏈接
- PyHook3 安裝 https://www.cnblogs.com/Denon-CAT/p/12771357.html
代碼
注意
在使用該程序時, 需要保證你登錄的 QQ 不存在驗證(滑動驗證 / 文字點擊驗證的方式)。滑動驗證的模塊已經(jīng)設(shè)計好, 如下代碼中的注釋部分。 但是QQ驗證完成之后, 它會提示無法新設(shè)備無法登錄, 因此使用代碼的前提是你要登錄的QQ已經(jīng)指定你的電腦作為安全登錄設(shè)備,無需驗證。
注意, 由于屏幕尺寸和分辨率的不同, 點擊的位置可能出現(xiàn)偏差, 因此需要自己進行微調(diào),
mouse.click(login_focus[4][0] + 200, login_focus[4][1] + 250, 1, 1)
修改偏移即可。
import os
import time
import win32gui
import win32api
import win32con
from pymouse import PyMouse
from pykeyboard import PyKeyboard
from ctypes import *
def autoLoginQQ(username, password):
# 找到運行 QQ 的位置
os.system('"C:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe"')
time.sleep(5) # 延時, 防止提前點擊
# 獲取QQ的窗口句柄
# 參數(shù)1是類名,參數(shù)2是QQ軟件的標(biāo)題
frame = win32gui.FindWindow(None, "QQ")
# 獲取QQ登錄窗口的位置
login_focus = win32gui.GetWindowPlacement(frame)
# 定義一個鍵盤對象和一個鼠標(biāo)對象
keyboard = PyKeyboard()
mouse = PyMouse()
# 模擬點擊事件, 用于點擊輸入用戶名
mouse.click(login_focus[4][0] + 200, login_focus[4][1] + 250, 1, 1)
time.sleep(1)
# 輸入用戶名
keyboard.type_string(username)
time.sleep(1)
# 切換密碼輸入
keyboard.tap_key(keyboard.tab_key)
# 輸入密碼
keyboard.type_string(password)
# 按下回車
keyboard.press_key(keyboard.enter_key)
keyboard.release_key(keyboard.enter_key)
time.sleep(10)
# 最小化登錄窗口
frame = win32gui.FindWindow(None, "QQ")
# 獲取QQ登錄窗口的位置
login_focus = win32gui.GetWindowPlacement(frame)
mouse.click(login_focus[4][0] + 240, login_focus[4][1] + 30, 1, 1)
# # 這里如果需要驗證, 一般也即無法進行登錄, 所以去掉該模塊
# # 考慮是否有驗證碼滑動環(huán)節(jié)
# # 獲取鼠標(biāo)焦點, 用于點擊輸入用戶名
# time.sleep(5)
# # 循環(huán)滑動
# mouse = PyMouse()
# distance = 200
# while True:
# windll.user32.SetCursorPos(login_focus[4][0] + 160, login_focus[4][1] + 340) # 恢復(fù)鼠標(biāo)位置
# mouse.position() # 獲取當(dāng)前坐標(biāo)的位置
# win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) # 按下鼠標(biāo)
# time.sleep(0.2)
# mouse.move(login_focus[4][0] + distance, login_focus[4][1] + 340) # 鼠標(biāo)移動到xy位置
# win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) # 放開鼠標(biāo)
# time.sleep(0.2)
# distance += 2
# # 超出距離, 驗證失敗或無法登錄
# if distance >= 350:
# break
if __name__ == "__main__":
# 示例 - autoLoginQQ("156623442", "XXXX")
autoLoginQQ("", "") # 這里輸入用戶名和密碼
autoLoginQQ("", "") # 這里輸入用戶名和密碼
滑動驗證模塊 滑動驗證模塊 滑動驗證模塊文章來源:http://www.zghlxwxcb.cn/news/detail-599354.html
# 這里如果需要驗證, 一般也即無法進行登錄, 所以去掉該模塊
# 考慮是否有驗證碼滑動環(huán)節(jié)
# 獲取鼠標(biāo)焦點, 用于點擊輸入用戶名
time.sleep(5)
# 循環(huán)滑動
mouse = PyMouse()
distance = 200
while True:
windll.user32.SetCursorPos(login_focus[4][0] + 160, login_focus[4][1] + 340) # 恢復(fù)鼠標(biāo)位置
mouse.position() # 獲取當(dāng)前坐標(biāo)的位置
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) # 按下鼠標(biāo)
time.sleep(0.2)
mouse.move(login_focus[4][0] + distance, login_focus[4][1] + 340) # 鼠標(biāo)移動到xy位置
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) # 放開鼠標(biāo)
time.sleep(0.2)
distance += 2
# 超出距離, 驗證失敗或無法登錄
if distance >= 350:
break
運行結(jié)果
這里就不再貼結(jié)果了 win11 + python3 測試通過文章來源地址http://www.zghlxwxcb.cn/news/detail-599354.html
到了這里,關(guān)于Python實現(xiàn)批量QQ自動登錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!