Python模拟登陆强智教务以及使用(持续更新中)

现在的课表软件,广告真滴太多了,于是潜心想弄一个既简单又美观的课表。

目前已经实现的功能

  1. 获取cookie
  2. 获取课表
  3. 获取成绩
  4. 信息处理以及发送

开始工作

您需要准备一个python环境以及可以联网且自备火狐或者谷歌浏览器

第一大步 获取cookie

一、客户端加密处理
  1. 直接用我校的教务做例教务地址
    教务界面
  2. 按下F12打开开发者工具选择“Network”选项,并勾选“Preserve log”。
    前提工作
  3. 点击地址栏左边的“不安全”,将已存储的cookie删除并按下F5或者 Crtl + R刷新界面
    位置
    删除cookie的界面
  4. 可以在界面看到第一个GET请求里包含服务器在相应头里面的Set-Cookie
    在这里插入图片描述
  5. 我们继续往下看发现了验证码的请求信息
    在这里插入图片描述
    发现其有效cookie和get请求地址是
// Cookie和它的好朋友Request URL
Cookie: JSESSIONID=9680988439B17ECD5CA38A2CA3720A0A; SERVERID=122
Request URL: http://jw.wfu.edu.cn/verifycode.servlet
  1. 不难发现与第一个Get请求的Set-Cookie值相同,而且还舍去了无关值
    无关项: Path=/; HttpOnly path=/
    第一次get请求服务器给的Set-Cookie:Set-Cookie
    验证码的Cookie:Cookie

  2. 随便在账号和密码输入“123456789”和正确的验证码,发现有两条关于登陆的请求:在这里插入图片描述

  3. 先看第一个请求在这里插入图片描述由此可见其Cookie与第一此所得的Set-Cookie相同,并且是向http://jw.wfu.edu.cn/Logon.do?method=logon&flag=sess这个地址发送了post请求,先试着访问该网址,看看会返回什么在这里插入图片描述返回了一堆字符串,先留个影响应该是与登陆数据加密有关,继续看下一个请求在这里插入图片描述Cookie不变,也是post请求不过这次带上四个参数,分别是userAccount,userPassword,RANDOMCODE和encoded。不难看出分别代表账户、密码、随机码以及编码。前两个值为空我们在接下来的处理直接留空即可,再看随机码也就是验证码可以直接读验证码即可,最重要的是encoded的值是如何来的,接下来开始分析网页源码找到与encoded有关的再看看。

  4. 在开发者工具里选择“Sources”,按下Crtl + F 输入“encoded”寻找相关信息在这里插入图片描述不难看出,这是encoded的源头,点击左侧行号加入一些断点,再在账号密码里面输入“123456789”输入正确的验证码点击提交看其如何变化在这里插入图片描述提交后,分析其加密原理在这里插入图片描述不难看出,其dataStr其实就是之前post其http://jw.wfu.edu.cn/Logon.do?method=logon&flag=sess点击前往所返回的字符串,利用#将dataStr一分为二,左边的值为scode,右边的值为sxh。而code则是我们之前输入的账号与“%%%”再与密码拼接而成的。

//拿上图的数据举例
dataStr = "0u392G8aeR59otA1jAqEL84e9N4802352L8G1788#13121331331232313121"
scode = "0u392G8aeR59otA1jAqEL84e9N4802352L8G1788"
sxh = "13121331331232313121"
code = "123456789%%%123456789"
encoded = ""
  1. 继续往下走加密算法不难发现,当i<20时,按照其语句来分析就是encoded = encoded + code的第i个字符 + scode取第一个第sxh的第i个的数字,如果i>20,直接把code剩下的拼接到encoded即可。再往下走,看看是否如此:在这里插入图片描述然而结果就是这样
//拿上图的数据举例
dataStr = "0u392G8aeR59otA1jAqEL84e9N4802352L8G1788#13121331331232313121"
scode = "0u392G8aeR59otA1jAqEL84e9N4802352L8G1788"
sxh = "13121331331232313121"
code = "123456789%%%123456789"
encoded = "102u39324G85a6eR579ot8A91jA%qEL%8%4e19N42803235425L8G61778889"
  1. 用Python实现encoded算法如下:
dataStr = "0u392G8aeR59otA1jAqEL84e9N4802352L8G1788#13121331331232313121"  # 客户端获取的dataStr
usr = "123456789"  # 账户
psw = "123456789"  # 密码
split_str_data = dataStr.split("#")  # 用"#"分开彼此
scode = split_str_data[0]  # 获取scode
sxh = split_str_data[1]  # 获取sxh
code = usr + "%%%" + psw  # 获取code
lang = 0
for b in code:  # 计算长度
    lang += 1
encoded = ""
b = 0
for a in range(lang):  # 遍历实现encoded算法
    if a < 20:
        encoded = encoded + code[a]
        for c in range(int(sxh[a])):  # 再次遍历实现scode长度相加
            encoded = encoded + scode[b]
            b += 1
    else:
        encoded = encoded + code[20:]  # i > 20 直接把余下的code拼接
        break
print(encoded)  # 打印结果

# 结果
102u39324G85a6eR579ot8A91jA%qEL%8%4e19N42803235425L8G61778889

2021年5月13日14:18:38先写到这儿,还有些事儿要处理,明后再更新cookie章节

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值