爬虫案例十三js逆向模拟登录中大网校

发布于:2025-03-14 ⋅ 阅读:(20) ⋅ 点赞:(0)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

js 逆向模拟登录中大网校


提示:以下是本篇文章正文内容,下面案例可供参考

一、网站分析

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、代码

js代码

var JSEncrypt = require("node-jsencrypt")

var encryptFn = function(e) {
    var o = new JSEncrypt;
    return o.setPublicKey("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDA5Zq6ZdH/RMSvC8WKhp5gj6Ue4Lqjo0Q2PnyGbSkTlYku0HtVzbh3S9F9oHbxeO55E8tEEQ5wj/+52VMLavcuwkDypG66N6c1z0Fo2HgxV3e0tqt1wyNtmbwg7ruIYmFM+dErIpTiLRDvOy+0vgPcBVDfSUHwUSgUtIkyC47UNQIDAQAB"),
    o.encrypt(e)
}

python代码

import base64
import requests
import json
import execjs
def base64_api(uname, pwd, img, typeid):
    with open(img, 'rb') as f:
        base64_data = base64.b64encode(f.read())
        b64 = base64_data.decode()
    data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}
    result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)
    if result['success']:
        return result["data"]["result"]
    else:
        # !!!!!!!注意:返回 人工不足等 错误情况 请加逻辑处理防止脚本卡死 继续重新 识别
        return result["message"]
    return ""

session = requests.session()
session.headers = {
	"":""# 头自行添加
}

url = "https://user.wangxiao.cn/login"
param = {
    "url": "{{url}}"
}
resp = session.get(url,params=param)
# print(resp.headers) # 'Set-Cookie': 'sessionId=1741766931245; path=/'

yzm_url = "https://user.wangxiao.cn/apis//common/getImageCaptcha"
yzm_resp = session.post(yzm_url,headers={
    "Content-Type":"application/json;charset=UTF-8"
})

with open("tu.jpg",mode="wb") as f:
    f.write(base64.b64decode(yzm_resp.json()["data"].split(',')[-1]))

yzm_code = base64_api(uname='你的图鉴账号', pwd='你的图鉴密码',
                        img="./tu.jpg",typeid=3)
print(yzm_code)

get_time_url = "https://user.wangxiao.cn/apis//common/getTime"
get_time_resp = session.post(get_time_url,headers={
    "Content-Type":"application/json;charset=UTF-8"
})
# r_time = get_time_resp.json()["data"]

login_url = "https://user.wangxiao.cn/apis//login/passwordLogin"
username = "你的中大网校账号"
pwd = "你的中大网校密码"
r_time = get_time_resp.json()["data"]
f = open("wx.js",mode='r',encoding='utf-8')
js_code = f.read()
js = execjs.compile(js_code)
jm_pwd = js.call("encryptFn",pwd + r_time)
print(pwd + r_time)
data = {
    "imageCaptchaCode": yzm_code,
    "password": jm_pwd,
    "userName": username
}
login_resp = session.post(login_url,data=json.dumps(data,separators=(',', ':')),headers={
    "Content-Type":"application/json;charset=UTF-8"
})
login_data = login_resp.json()['data']
session.cookies['userInfo'] = json.dumps(login_data,separators=(',', ':'))
session.cookies['token'] = login_data['token']
session.cookies['UserCookieName'] = login_data['userName']
session.cookies['OldUsername2'] = login_data['userNameCookies']
session.cookies['OldUsername'] = login_data['userNameCookies']
session.cookies['OldPassword'] = login_data['passwordCookies']
session.cookies['UserCookieName_'] = login_data['userName']
session.cookies['OldUsername2_'] = login_data['userNameCookies']
session.cookies['OldUsername_'] = login_data['userNameCookies']
session.cookies['OldPassword_'] = login_data['passwordCookies']
session.cookies[login_data['userName'] + "_exam"] = login_data['sign']

q_url = "https://ks.wangxiao.cn/TestPaper/getPaperRuleQuestions"
q_data = '{"id":"21F74E2F-44FA-4550-B481-5EF80A4BA09F"}'
q_resp = session.post(q_url,data=q_data,headers={
    "Content-Type": "application/json;charset=UTF-8",
    "Host": "ks.wangxiao.cn",
    "Origin": "https://ks.wangxiao.cn"
})
print(q_resp.text)

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到