44import requests
55import re
66import json
7+ import random
8+ import time
9+ import os
710
811
912# 入口
1013url_root = 'https://ui.ptlogin2.qq.com/cgi-bin/login?daid=164&target=self&style=16&mibao_css=m_webqq&appid=501004106&enable_qlogin=0&no_verifyimg=1&s_url=http%3A%2F%2Fw.qq.com%2Fproxy.html&f_url=loginerroralert&strong_login=1&login_state=10&t=20131024001'
1114
1215# 验证参数
13- url_check = 'https://ssl.ptlogin2.qq.com/check?pt_tea=1&uin=123456&appid=501004106&js_ver=10125&js_type=0&login_sig=&u1=http%3A%2F%2Fw.qq.com%2Fproxy.html&r=0.5067279115319252'
16+ url_check = 'https://ssl.ptlogin2.qq.com/check'
17+
18+ # 图形验证码
19+ url_img_verify = 'https://ssl.captcha.qq.com/getimage?aid=501004106&r=0.746980357915163&uin=555555&cap_cd=Yktn0uE_UcyPqpvIbJe99ncYNR1jVUbobBraaII7JI5aTuzo5UJzsA**'
1420
1521# 登录页的url
1622url_login = 'https://ssl.ptlogin2.qq.com/login'
1925header = {
2026 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36' }
2127
28+ # 加密salt
29+ salt = ''
30+
2231# 登录需要的参数
2332payload = {
24- 'u' : '123456 ' ,
33+ 'u' : '234567 ' ,
2534 'p' : '2rDrq7sBKdqkqzHgyntOBpaM6p8RAAcBpEio3*UCWuMNiG0LUw6WRsKTDsps2GJ6vAf1CPd-HoNl-QFekDH9Lfn54h1KOvOZeQlARGNPON0JECRoSUF1*8kOezqzRqBFMVVPM5cMJ3PFjn00*5KbpSHkHAJHF9AV3kV-JKE0iChfjaXcOBkRKv75mM2j8RQByBz0KFPssmrgKqPIGGatXw__' ,
26- 'verifycode' : '!NQA' ,
35+ # 'verifycode': '!NQA',
36+ 'verifycode' : '!QYD' ,
2737 # 隐藏域表单参数-------------start
28- 'webqq_type' : 10 , # 10: "在线",20: "离线",30: "离开",40: "隐身",50: "忙碌",60: "Q我吧",70: "请勿打扰",
29- 'remember_uin' : 1 ,
30- 'login2qq' : 1 ,
31- 'aid' : 501004106 ,
38+ 'webqq_type' : '10' , # 10: "在线",20: "离线",30: "离开",40: "隐身",50: "忙碌",60: "Q我吧",70: "请勿打扰",
39+ 'remember_uin' : '1' ,
40+ 'login2qq' : '1' ,
41+ 'aid' : ' 501004106' ,
3242 'u1' : 'http://w.qq.com/proxy.html?login2qq=1&webqq_type=10' ,
33- 'h' : 1 ,
34- 'ptredirect' : 0 ,
35- 'ptlang' : 2052 ,
36- 'daid' : 164 ,
37- 'from_ui' : 1 ,
38- 'pttype' : 1 ,
43+ 'h' : '1' ,
44+ 'ptredirect' : '0' ,
45+ 'ptlang' : ' 2052' ,
46+ 'daid' : ' 164' ,
47+ 'from_ui' : '1' ,
48+ 'pttype' : '1' ,
3949 'dumy' : '' ,
4050 'fp' : 'loginerroralert' ,
4151 # 隐藏域表单参数-------------end
42- 'action' : '0-12-229270' ,
52+ 'action' : '0-21-27455' ,
53+ # 前两个参数初始值[0, 0]分别对应鼠标点击,键盘按下的次数,最后一个是点击登录按钮与页面初次加载的时间差
54+ # 贱人,这明显是记录用户行为的~~腾讯的人品可见一斑
4355 'mibao_css' : 'm_webqq' ,
44- 't' : 1 ,
45- 'g' : 1 ,
46- 'js_type' : 0 ,
47- 'js_ver' : 10125 ,
56+ 't' : '1' ,
57+ 'g' : '1' ,
58+ 'js_type' : '0' ,
59+ 'js_ver' : ' 10125' ,
4860 'login_sig' : '' ,
49- 'pt_randsalt' : 0 ,
50- 'pt_vcode_v1' : 0 ,
61+ 'pt_randsalt' : '0' ,
62+ 'pt_vcode_v1' : '0' ,
5163 'pt_verifysession_v1' : 'e8dd4fef1f230072429cae05732530ef5d7df5fa61660a7311235e2315409046d556365705db19ae32cd082739370abd93a5f90e5a174a5a' ,
5264}
5365
@@ -76,8 +88,45 @@ def parse_hide_params(html):
7688
7789
7890def get_check ():
79- response = s .get (url_check , headers = header )
80- return response .content
91+ """
92+ 获取验证信息
93+ :return:
94+ """
95+ check_payload = {
96+ 'pt_tea' : '1' , # 固定值:1
97+ 'uin' : payload ['u' ],
98+ 'appid' : payload ['aid' ],
99+ 'js_ver' : 10125 , # 固定值
100+ 'js_type' : 0 , # 固定值
101+ 'login_sig' : '' , # 固定值
102+ 'u1' : 'http://w.qq.com/proxy.html' , # 固定值
103+ 'r' : random .random ()
104+ }
105+ # 具体参数参考607行[https://ui.ptlogin2.qq.com/js/10125/mq_comm.js]
106+ response = s .get (url_check , params = check_payload , headers = header )
107+ check_dict = response .content
108+ payload ['verifycode' ] = check_dict .split (',' )[1 ].strip ('\' ' )
109+ salt = check_dict .split (',' )[2 ].strip ('\' ' )
110+ payload ['pt_verifysession_v1' ] = check_dict .split (',' )[3 ].strip ('\' ' )
111+
112+
113+ def get_img_verify ():
114+ """
115+ 获取图形验证码
116+ :return:
117+ """
118+ img_payload = {
119+ 'aid' : payload ['aid' ],
120+ 'r' : random .random (),
121+ 'uin' : payload ['u' ],
122+ 'cap_cd' : payload ['pt_verifysession_v1' ]
123+ }
124+ img_name = os .path .split (os .path .realpath (__file__ ))[0 ] + '/static/QQImgVerify/' + str (time .time ()) + '.jpg'
125+ img_ret = s .get (url_check , params = img_payload , headers = header )
126+ with open (img_name , 'wb' ) as f :
127+ f .write (img_ret .content )
128+ print img_name
129+ return img_name
81130
82131
83132def login ():
@@ -90,13 +139,17 @@ def login():
90139
91140
92141if __name__ == "__main__" :
142+ # 获取隐藏域表单参数
93143 params_html = get_hide_params_html ()
94144 params = parse_hide_params (params_html )
95-
96- print dict (json .loads (params ))
97- check_dict = get_check ()
98- payload ['pt_verifysession_v1' ] = check_dict .split (',' )[3 ]
99-
145+ payload_hide_params = dict (json .loads (params ))
146+ print payload_hide_params
147+ payload = dict (payload , ** payload_hide_params )
148+ # 获取验证参数
149+ get_check ()
150+
151+ print json .dumps (payload , ensure_ascii = False , indent = 4 )
152+ # 登录
100153 result = login ()
101154 print result
102155
0 commit comments