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章节

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
可以使用Python的Selenium库来实现模拟登录操作。引用提到了使用Selenium库可以调用浏览器来访问网站,并且可以将代码的操作转化为浏览器执行的操作。这样我们就可以轻松地进行登录等操作。 另外,引用给出了使用requests库进行模拟登录的代码示例。首先,我们需要设置POST请求的数据,包括登录所需的用户名和密码等信息。然后,设置请求头信息,模拟浏览器发送请求。接下来,构造一个Session对象,用于存储登录后的cookie信息。使用Session对象发送登录请求,登录成功后就可以访问需要登录才能访问的网页了。 另外一种方法是使用无头浏览器进行访问,这样可以避免打开浏览器窗口,实现后台操作。可以使用Selenium的无头浏览器模式来实现无可视化界面的操作。 综上所述,Python模拟登录可以使用Selenium库或者requests库结合Session对象进行操作,也可以使用无头浏览器进行访问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python模拟登录的四种方法](https://blog.csdn.net/wulishinian/article/details/105142787)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值