Python实现批量QQ自动登录

需求描述

需要使用 Python 设计一个 QQ 的批量自动登录的脚本, 查了一些资料, 通过调 API 实现该功能。

准备工作

代码主要使用了几个常用的 API

  • win32gui
  • win32api
  • win32con
  • PyUserInput 前置需要安装 PyHook,否则会报错
    • pykeyboard
    • pymouse
  • 参考链接
    • PyHook3 安装 https://www.cnblogs.com/Denon-CAT/p/12771357.html

代码

注意

  • 在使用该程序时, 需要保证你登录的 QQ 不存在验证(滑动验证 / 文字点击验证的方式)。滑动验证的模块已经设计好, 如下代码中的注释部分。 但是QQ验证完成之后, 它会提示无法新设备无法登录, 因此使用代码的前提是你要登录的QQ已经指定你的电脑作为安全登录设备,无需验证。

  • 注意, 由于屏幕尺寸和分辨率的不同, 点击的位置可能出现偏差, 因此需要自己进行微调,

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的窗口句柄
    # 参数1是类名,参数2是QQ软件的标题
    frame = win32gui.FindWindow(None, "QQ")
    # 获取QQ登录窗口的位置
    login_focus = win32gui.GetWindowPlacement(frame)
    # 定义一个键盘对象和一个鼠标对象
    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)
    # # 这里如果需要验证, 一般也即无法进行登录, 所以去掉该模块
    # # 考虑是否有验证码滑动环节
    # # 获取鼠标焦点, 用于点击输入用户名
    # time.sleep(5)
    # # 循环滑动
    # mouse = PyMouse()
    # distance = 200
    # while True:
    #     windll.user32.SetCursorPos(login_focus[4][0] + 160, login_focus[4][1] + 340)        # 恢复鼠标位置
    #     mouse.position()  # 获取当前坐标的位置
    #     win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)  # 按下鼠标
    #     time.sleep(0.2)
    #     mouse.move(login_focus[4][0] + distance, login_focus[4][1] + 340)             # 鼠标移动到xy位置
    #     win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)    # 放开鼠标
    #     time.sleep(0.2)
    #     distance += 2
    #     # 超出距离, 验证失败或无法登录
    #     if distance >= 350:
    #         break


if __name__ == "__main__":
    # 示例 - autoLoginQQ("156623442", "XXXX")
    autoLoginQQ("", "")          # 这里输入用户名和密码
    autoLoginQQ("", "")          # 这里输入用户名和密码

滑动验证模块 滑动验证模块 滑动验证模块

# 这里如果需要验证, 一般也即无法进行登录, 所以去掉该模块
    # 考虑是否有验证码滑动环节
    # 获取鼠标焦点, 用于点击输入用户名
    time.sleep(5)
    # 循环滑动
    mouse = PyMouse()
    distance = 200
    while True:
        windll.user32.SetCursorPos(login_focus[4][0] + 160, login_focus[4][1] + 340)        # 恢复鼠标位置
        mouse.position()  # 获取当前坐标的位置
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)  # 按下鼠标
        time.sleep(0.2)
        mouse.move(login_focus[4][0] + distance, login_focus[4][1] + 340)             # 鼠标移动到xy位置
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)    # 放开鼠标
        time.sleep(0.2)
        distance += 2
        # 超出距离, 验证失败或无法登录
        if distance >= 350:
            break

运行结果

这里就不再贴结果了 win11 + python3 测试通过

你可能感兴趣的:(Python,python,数据库,开发语言)