Python3.2模拟实现webqq登录

yizhihongxing

下面是“Python3.2模拟实现webqq登录”的完整攻略,主要分为以下几步:

准备工作

  1. 安装Python 3.2及以上版本,并配置好环境变量。

  2. 安装requests模块,这个模块是用来发送HTTP请求的,可以通过pip安装:

pip install requests

  1. 获取WebQQ登录所需的一些参数,主要有以下几个:

  2. ptwebqq:通过访问https://s.web2.qq.com,查看Cookie中名为ptwebqq的值。该参数是登录WebQQ时所需的主要参数。

  3. g_login_sig:通过访问https://d1.web2.qq.com,查看Cookie中名为g_login_sig的值。该参数是登录WebQQ时所需的主要参数。

  4. ptqrtoken:通过访问https://ptlogin2.qq.com/check,查看返回的含有ptqrtoken参数的url。该参数是处理二维码时所需的主要参数。

  5. session:通过访问https://s.web2.qq.com,查看Cookie中名为skey的值。该参数是登录WebQQ后所需的主要参数。

  6. vfwebqq:通过访问https://s.web2.qq.com,查看返回的JSON数据中含有vfwebqq参数的值。该参数是处理消息时所需的主要参数。

实现代码

以下是Python代码实现WebQQ登录过程的完整攻略:

import time
import random
import hashlib
import requests


def get_login_url(qr_code_url):
    """
    处理二维码,获取登录后的URL
    """
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
    }
    response = requests.get(qr_code_url, headers=headers)
    ptqrtoken = response.cookies.get('qrsig')
    print('请扫描二维码登录...')
    while True:
        time.sleep(1)
        check_url = 'https://ssl.ptlogin2.qq.com/check?ptqrtoken={}&webqq_type=10&remember_uin=1&login2qq=1&aid=501004106&u1=https%3A%2F%2Fqq.com%2F&ptredirect=0&h=1&from_ui=1&pttype=1&dumy=&fp=loginerroralert&action=0-0-{}'.format(ptqrtoken, int(time.time()*1000))
        check_response = requests.get(check_url, headers=headers)
        if '登录成功' in check_response.text:
            return check_response.text.split('\'')[1]


def get_login_cookies(qr_code_url):
    """
    获取登录后的Cookie
    """
    login_url = get_login_url(qr_code_url)
    ptcz = ''
    uin = ''
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
        'Referer': 'https://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=501004106&daid=1&pt_no_auth=1&s_url=https://web2.qq.com/proxy.html&style=40&low_login=0&proxy_url=https://web2.qq.com/proxy.html&hide_title_bar=1&hide_close_icon=1&no_verifyimg=1&no_qrcode=0&self_regurl=https://ui.ptlogin2.qq.com/cgi-bin/login?proxy_url=https://web2.qq.com/proxy.html&pt_i_from=&ptlang=2052&ptredirect=0&aid=501004106&login_sig=&pt_uistyle=40&pt_jstoken=401524137',
    }
    response = requests.get(login_url, headers=headers)
    for cookie in response.cookies:
        if cookie.name == 'ptcz':
            ptcz = cookie.value
        elif cookie.name == 'uin':
            uin = cookie.value
    return {
        'ptwebqq': response.cookies.get('ptwebqq'),
        'pgv_pvid': '5878843884',
        'pgv_info': 'ssid=s6840495612',
        'skey': response.cookies.get('skey'),
        'p_uin': uin,
        'p_skey': response.cookies.get('p_skey'),
        'ptcz': ptcz,
        'qrsig': '',  # 这个字段可以不用设置,因为已经获取到了。
        'uin': uin,
    }


def get_vfwebqq(cookies):
    """
    获取vfwebqq参数
    """
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
        'Referer': 'https://s.web2.qq.com/proxy.html?v=20130916001&callback=1&id=1',
    }
    url = 'https://s.web2.qq.com/api/getvfwebqq?ptwebqq={}&clientid=53999199&psessionid=&t={}'.format(cookies['ptwebqq'], int(time.time()))
    response = requests.get(url, headers=headers, cookies=cookies)
    return response.json()['result']['vfwebqq']


def get_psessionid_and_uid(cookies):
    """
    获取psessionid和uid参数
    """
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
        'Referer': 'https://d1.web2.qq.com/cfproxy.html?v=20151105001&callback=1',
    }
    url = 'https://d1.web2.qq.com/channel/login2'
    r = str(int(random.random()*100000000))
    login_data = {
        'r': r,
        'pt2gguin': cookies['uin'],
        'ptwebqq': cookies['ptwebqq'],
        'clientid': 53999199,
        'psessionid': '',
        'status': 'online',
    }
    psessionid_header = {
        'Referer': 'https://d1.web2.qq.com/proxy.html?v=20151105001&callback=1&id=2',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
        'Origin': 'https://d1.web2.qq.com',
    }
    response = requests.post(url, headers=headers, cookies=cookies, json=login_data)
    psessionid = response.json()['result']['psessionid']
    uid = response.json()['result']['uin']
    return psessionid, uid


def get_group_list(psessionid, cookies):
    """
    获取群组列表
    """
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
        'Referer': 'https://d1.web2.qq.com/cfproxy.html?v=20151105001&callback=1',
    }
    url = 'https://s.web2.qq.com/api/get_group_name_list_mask2'
    r = str(int(random.random()*100000000))
    data = {
        'r': r,
        'vfwebqq': get_vfwebqq(cookies),
        'hash': hashlib.md5((str(cookies['p_uin'])+psessionid).encode('utf-8')).hexdigest(),
    }
    response = requests.post(url, headers=headers, cookies=cookies, json=data)
    return response.json()


if __name__ == '__main__':
    qr_code_url = 'https://ptlogin2.qq.com/ptqrshow?appid=501004106&e=2&l=M&s=3&d=72&v=4&t=0.5257469508827072'
    cookies = get_login_cookies(qr_code_url)
    psessionid, uid = get_psessionid_and_uid(cookies)
    group_list = get_group_list(psessionid, cookies)
    print(group_list)

示例说明

为了更好的说明上述程序,这里给出两个示例:

示例一

输入以下代码即可运行第一个示例:

if __name__ == '__main__':
    qr_code_url = 'https://ptlogin2.qq.com/ptqrshow?appid=501004106&e=2&l=M&s=3&d=72&v=4&t=0.5257469508827072'
    cookies = get_login_cookies(qr_code_url)
    psessionid, uid = get_psessionid_and_uid(cookies)
    group_list = get_group_list(psessionid, cookies)
    print(group_list)

运行该程序后,会输出WebQQ所有的群组名称及其gid和code值。示例输出如下:

{'retcode': 0, 'result': {'gnamelist': [{'flag': 16778241, 'name': '某某联盟(006)', 'gid': 1929842108, 'code': 530648501, 'owner': 835698566, 'createtime': 1479142131, 'level': 5}, {'flag': 81, 'name': '客户群', 'gid': 875150207, 'code': 3084357681, 'owne...

示例二

下面是另一个示例,该示例演示如何发送WebQQ消息。输入以下代码即可运行:

import json


def send_message(qq_number, message_content, psessionid, cookies):
    """
    发送WebQQ消息
    """
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
        'Referer': 'https://d1.web2.qq.com/cfproxy.html?v=20151105001&callback=1&id=2',
    }
    url = 'https://d1.web2.qq.com/channel/send_buddy_msg2'
    r = str(int(random.random()*100000000))
    data = {
        'r': r,
        'to': qq_number,
        'face': 0,
        'content': json.dumps([message_content, ['font', {'name': '宋体', 'size': '10', 'style': [0, 0, 0], 'color': '000000'}]]),
        'msg_id': int(time.time()*1000),
        'clientid': 53999199,
        'psessionid': psessionid,
    }
    response = requests.post(url, headers=headers, cookies=cookies, json=data)
    return response.json()


if __name__ == '__main__':
    qq_number = 12345  # 这里填入测试对象的QQ号码。
    message_content = 'Hello, World!'  # 这里填入消息内容。
    qr_code_url = 'https://ptlogin2.qq.com/ptqrshow?appid=501004106&e=2&l=M&s=3&d=72&v=4&t=0.5257469508827072'
    cookies = get_login_cookies(qr_code_url)
    psessionid, uid = get_psessionid_and_uid(cookies)
    send_message(qq_number, message_content, psessionid, cookies)

运行该程序后,会自动发送消息给指定的WebQQ用户。注意,此处需要手动输入测试用户的QQ号码,以及要发送的消息内容。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python3.2模拟实现webqq登录 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Linux服务器网卡流量查看方法 shell和Python各一枚

    Linux服务器网卡流量查看方法 shell和Python各一枚 在Linux服务器上,我们经常会需要查看网卡的流量情况,以便了解网络带宽的使用情况和网络环境的波动情况。下面分别介绍使用shell脚本和Python脚本来查看网卡流量的方法。 使用Shell脚本查看网卡流量 在Linux系统中,我们可以通过/proc/net/dev文件来查看网卡的流量情况。我…

    python 2023年6月3日
    00
  • Python requests.post()方法中data和json参数的使用方法

    以下是关于Python requests.post()方法中data和json参数的使用方法的攻略: Python requests.post()方法中data和json参数的使用方法 在Python requests库中,使用post()方法提交数据时,可以使用data和json参数。以下是Python requests.post()方法中data和jso…

    python 2023年5月14日
    00
  • python文字转语音的实例代码分析

    下面我来为你详细讲解“python文字转语音的实例代码分析”的完整攻略。 什么是文字转语音? 文字转语音技术,是指将书面文字转换为自然语言音频的技术。其中,自然语言处理技术(NLP)是实现文字转语音的核心技术之一。 为什么要使用Python进行文字转语音? Python是一种简单易学的编程语言,且在自然语言处理和语音识别上有着丰富的第三方库和工具。因此,使用…

    python 2023年5月19日
    00
  • python获得图片base64编码示例

    下面是Python获得图片Base64编码的完整攻略。 准备工作 在开始之前,你需要安装Python的base64模块,它是Python内置的模块,已经包含在Python的标准库中。如果你使用的是Python 2,那么你需要使用base64模块中的encodestring()方法,如果你使用的是Python 3,则你需要使用base64模块中的encodeb…

    python 2023年5月18日
    00
  • 跟老齐学Python之玩转字符串(1)

    我来详细讲解一下“跟老齐学Python之玩转字符串(1)”的完整攻略。 文章背景 在日常编程中,字符串是一种常见的数据类型。学好字符串的使用,对程序员来说非常重要。本文将详细介绍Python中字符串的定义、常用操作和实际应用。 什么是字符串? 在Python中,字符串是由一系列字符组成的。字符可以是字母、数字、符号等。用引号括起来的字符均被视为字符串。 字符…

    python 2023年5月20日
    00
  • Python反射机制实例讲解

    下面我将为您详细讲解“Python反射机制实例讲解”的完整攻略。 什么是反射机制 Python 中的反射机制指的是,在运行时获取类、对象的属性、方法等信息的能力。 通过反射,我们可以动态获取一个对象的属性或方法并执行,从而简化代码的复用和增加程序的灵活性。 反射机制的应用场景 当我们无法确定一个对象是属于哪个类时,可以使用反射机制来判断其所属类型。 当我们需…

    python 2023年6月3日
    00
  • 详解Python二维数组与三维数组切片的方法

    关于“详解Python二维数组与三维数组切片的方法”的攻略,以下是完整的讲解: 1. 二维数组切片 1.1 二维数组的定义 在Python中,我们可以使用列表(List)来定义二维数组。例如,下面这个代码可以生成一个3×3的二维数组: matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 1.2 二维数组的切片方法 我们可以使…

    python 2023年6月6日
    00
  • Python爬虫之正则表达式的使用教程详解

    Python爬虫之正则表达式的使用教程详解 正则表达式是一种强大的文本处理工具,可以用于各种文本处理任务,如数据清洗、文本分析、信息提取等。在Python爬虫中,正则表达式也是一种常用的工具,可以用于从网页中提取所需的信息。本攻略将详细讲解Python爬虫中正则表达式的使用,包括正则表达式的基本语法、常用的正则表达式模式、如何使用正则表达式提取网页中的信息等…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部