python-QQ群扫码登录(QQ群验证)

python-QQ群扫码登录源码

#-*- coding = utf-8 -*-
#@Time : 2020/9/27 
#@Author : 小柠檬
#@File : QQ扫码登录QQ群官网.py
#@Software: 
import requests
from PIL import Image
import time
import re
import sys

def bkn(Skey):
    t = 5381
    n = 0
    o = len(Skey)
    while n < o:
        t += (t << 5) + ord(Skey[n])
        n += 1
    return t & 2147483647

def ptqrtoken(qrsig):
    n = len(qrsig)
    i = 0
    e = 0
    while n > i:
        e += (e << 5) + ord(qrsig[i])
        i += 1
    return 2147483647 & e

def QR():
    url = 'https://ssl.ptlogin2.qq.com/ptqrshow?appid=715030901&e=2&l=M&s=3&d=72&v=4&t=0.'+str(time.time())+'&daid=73&pt_3rd_aid=0'
    r = requests.get(url)
    qrsig = requests.utils.dict_from_cookiejar(r.cookies).get('qrsig')
    with open(r'C:\Users\Administrator\Desktop\QR.png','wb') as f:
        f.write(r.content)
    im = Image.open(r'C:\Users\Administrator\Desktop\QR.png')
    im = im.resize((350,350))
    print('登录二维码获取成功',time.strftime('%Y-%m-%d %H:%M:%S'))
    im.show()
    return qrsig

def cookies(qrsig,ptqrtoken):
    while 1:
        url = 'https://ssl.ptlogin2.qq.com/ptqrlogin?u1=https%3A%2F%2Fqun.qq.com%2Fmanage.html%23click&ptqrtoken=' + str(ptqrtoken) + '&ptredirect=1&h=1&t=1&g=1&from_ui=1&ptlang=2052&action=0-0-' + str(time.time()) + '&js_ver=20032614&js_type=1&login_sig=&pt_uistyle=40&aid=715030901&daid=73&'
        cookies = {'qrsig': qrsig}
        r = requests.get(url,cookies = cookies)
        r1 = r.text
        if '二维码未失效' in r1:
            print('二维码未失效',time.strftime('%Y-%m-%d %H:%M:%S'))
        elif '二维码认证中' in r1:
            print('二维码认证中',time.strftime('%Y-%m-%d %H:%M:%S'))
        elif '二维码已失效' in r1:
            print('二维码已失效',time.strftime('%Y-%m-%d %H:%M:%S'))
        else:
            print('登录成功',time.strftime('%Y-%m-%d %H:%M:%S'))
            cookies = requests.utils.dict_from_cookiejar(r.cookies)
            uin = requests.utils.dict_from_cookiejar(r.cookies).get('uin')
            regex = re.compile(r'ptsigx=(.*?)&')
            sigx = re.findall(regex,r.text)[0]
            url = 'https://ptlogin2.qun.qq.com/check_sig?pttype=1&uin=' + uin + '&service=ptqrlogin&nodirect=0&ptsigx=' + sigx + '&s_url=https%3A%2F%2Fqun.qq.com%2Fmanage.html&f_url=&ptlang=2052&ptredirect=101&aid=715030901&daid=73&j_later=0&low_login_hour=0&regmaster=0&pt_login_type=3&pt_aid=0&pt_aaid=16&pt_light=0&pt_3rd_aid=0'
            r2 = requests.get(url,cookies=cookies,allow_redirects=False)
            targetCookies = requests.utils.dict_from_cookiejar(r2.cookies)
            skey = requests.utils.dict_from_cookiejar(r2.cookies).get('skey')
            break
        time.sleep(3)
    return targetCookies,skey

def qun(cookies,bkn,num):
    url = 'https://qun.qq.com/cgi-bin/qun_mgr/get_group_list'
    data = {'bkn':bkn}
    cookies = cookies
    r = requests.post(url,data = data,cookies = cookies)
    regex = re.compile(r'"gc":(\d+),"gn')
    r = re.findall(regex,r.text)
    if num in r:
        return True
    else:
        return False

if __name__ == '__main__':
    qrsig = QR()
    ptqrtoken = ptqrtoken(qrsig)
    cookie = cookies(qrsig,ptqrtoken)
    skey = cookie[1]
    bkn = bkn(skey)
    ck = cookie[0]
    state = qun(ck, bkn,'434252251')
    if state:
        print('恭喜你,验证成功~')
        print('这里执行验证成功后的代码')
    else:
        print('很遗憾,验证失败~')
        print('程序在3秒后退出...')
        time.sleep(3)
        sys.exit()
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
当使用QQ扫码登录时,通常需要使用QQ提供的开放平台API来实现。以下是一个使用Python编写的示例代码,用于实现QQ扫码登录功能: ```python import requests # 获取授权码 def get_auth_code(): # 替换为你的AppID和回调地址 app_id = 'your_app_id' redirect_uri = 'your_redirect_uri' # 构造请求URL url = f'https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id={app_id}&redirect_uri={redirect_uri}' # 发送GET请求获取授权码 response = requests.get(url) # 解析返回的URL,提取授权码 auth_code = response.url.split('=')[1] return auth_code # 获取访问令牌 def get_access_token(auth_code): # 替换为你的AppID、AppKey和回调地址 app_id = 'your_app_id' app_key = 'your_app_key' redirect_uri = 'your_redirect_uri' # 构造请求URL url = f'https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id={app_id}&client_secret={app_key}&code={auth_code}&redirect_uri={redirect_uri}' # 发送GET请求获取访问令牌 response = requests.get(url) # 解析返回的URL,提取访问令牌 access_token = response.text.split('&')[0].split('=')[1] return access_token # 获取用户信息 def get_user_info(access_token): # 构造请求URL url = f'https://graph.qq.com/oauth2.0/me?access_token={access_token}' # 发送GET请求获取用户OpenID response = requests.get(url) # 解析返回的JSON数据,提取OpenID openid = response.text.split('"')[3] # 构造请求URL url = f'https://graph.qq.com/user/get_user_info?access_token={access_token}&oauth_consumer_key={app_id}&openid={openid}' # 发送GET请求获取用户信息 response = requests.get(url) # 解析返回的JSON数据,提取用户信息 user_info = response.json() return user_info # 示例代码的使用 auth_code = get_auth_code() access_token = get_access_token(auth_code) user_info = get_user_info(access_token) print(user_info) ``` 请注意,上述代码中的`your_app_id`、`your_app_key`和`your_redirect_uri`需要替换为你在QQ开放平台申请的实际值。此外,你还需要安装`requests`库来发送HTTP请求。 希望以上代码能够帮助到你!如果你有任何其他问题,请随时提问。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值