接上一篇
前言
半成品,模拟LOL页面登录(https://lol.qq.com),未完成。
因为lol登录后,转到前面分享页面会一直死循环跳转,没有动力再继续下去了…
# coding=utf-8
import requests
import re
import time
import execjs
def login(username, pwd):
session = requests.session()
# proxy = {
# 'http': '127.0.0.1:8888',
# 'https': '127.0.0.1:8888',
# }
# session.proxies = proxy
# session.verify = False
###################
url = "https://xui.ptlogin2.qq.com/cgi-bin/xlogin?proxy_url=https://game.qq.com/comm-htdocs/milo/proxy.html&appid=21000501&target=top&s_url=https%3A%2F%2Flol.qq.com%2Fmain.shtml&style=20&daid=8"
headers = {
'Host': 'xui.ptlogin2.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Referer': 'https://lol.qq.com/main.shtml',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
'TE': 'Trailers',
}
session.request(method='GET', url=url, headers=headers)
cookies = requests.utils.dict_from_cookiejar(session.cookies)
pt_login_sig = cookies['pt_login_sig']
#####################
url = "https://ssl.ptlogin2.qq.com/check?regmaster=&pt_tea=2&pt_vcode=1&uin=123456789&appid=21000501&js_ver=20032614&js_type=1&u1=https%3A%2F%2Flol.qq.com%2Fmain.shtml&r=0.8346944097860031&pt_uistyle=40&login_sig=" + pt_login_sig
headers = {
'Host': r'ssl.ptlogin2.qq.com',
'User-Agent': r'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0',
'Accept': r'*/*',
'Accept-Language': r'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': r'gzip, deflate, br',
'Connection': r'keep-alive',
'Referer': r'https://xui.ptlogin2.qq.com/cgi-bin/xlogin?proxy_url=https://game.qq.com/comm-htdocs/milo/proxy.html&appid=21000501&target=top&s_url=https%3A%2F%2Flol.qq.com%2Fmain.shtml&style=20&daid=8',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
'TE': 'Trailers',
}
result = session.request(method='GET', url=url, headers=headers).text
result = result.replace('ptui_checkVC(', '').replace('\r', '').replace('\n', '')[:-1]
temp = result.split(",")
vcode = temp[1].replace("'", '')
salt = str(temp[2].replace("'", ''))
cookies = requests.utils.dict_from_cookiejar(session.cookies)
print(cookies)
ptvfsession = cookies['ptvfsession']
ptdrvs = cookies['ptdrvs']
#####################
encryptedPwd = encrypt(pwd, salt, vcode)
url = "https://ssl.ptlogin2.qq.com/login?"
params = {
"u":username,
"verifycode":vcode,
"pt_vcode_v1":"0",
"pt_verifysession_v1":ptvfsession,
"p":encryptedPwd,
"pt_randsalt":"2",
"u1":"https%3A%2F%2Flol.qq.com%2Fmain.shtml", #"https://lol.qq.com/main.shtml",
"ptredirect":"1",
"h":"1",
"t":"1",
"g":"1",
"from_ui":"1",
"ptlang":"2052",
"action":"%d-%d-%d" % (2, len(pwd) + 1, int(round(time.time() * 1000))),
"js_ver":"20032614",
"js_type":"1",
"login_sig":pt_login_sig,
"pt_uistyle":"40",
"aid":"21000501",
"daid":"8",
"ptdrvs":ptdrvs
}
param_str = ''
for key in params:
param_str += '%s=%s&'%(key, params[key])
url += param_str
# urlencode(params)
print(url)
headers = {
'Host': 'ssl.ptlogin2.qq.com',
'User-Agent': r'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0',
'Accept': '*/*',
'Accept-Language': r'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Referer': r'https://xui.ptlogin2.qq.com/cgi-bin/xlogin?proxy_url=https://game.qq.com/comm-htdocs/milo/proxy.html&appid=21000501&target=top&s_url=https%3A%2F%2Flol.qq.com%2Fmain.shtml&style=20&daid=8',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
'TE': 'Trailers',
}
result = session.request(method='GET', url=url, headers=headers).text
print(result)
searchObj = re.search(r"(https://.*?)',", result)
if searchObj:
print("登录成功")
url = searchObj.group(1)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Referer': 'https://xui.ptlogin2.qq.com/',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
'TE': 'Trailers',
}
result = session.request(method='GET', url=url, headers=headers, allow_redirects=False).text
print(result)
session.close()
def encrypt(pwd, salt, vcode):
with open('encrypt.js', 'r') as f:
js_code = f.read()
ctx = execjs.compile(js_code)
result = ctx.call('encrypt', pwd, salt, vcode)
print(result)
return result
if __name__ == '__main__':
login('username', 'password')
encrypt("password", '\x00\x00\x00\x00\x07\x5b\xcd\x15', '!TRR')
encrypt.js
在此处