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

目前已经实现的功能

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

开始工作

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

第一大步 获取cookie

一、客户端加密处理

  1. 直接用我校的教务做例教务地址。
  2. 按下F12打开开发者工具选择“Network”选项,并勾选“Preserve log”。
  3. 点击地址栏左边的“不安全”,将已存储的cookie删除并按下F5或者 Crtl + R刷新界面

  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:
    验证码的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 += 1else:encoded = encoded + code[20:]  # i > 20 直接把余下的code拼接break
print(encoded)  # 打印结果# 结果
102u39324G85a6eR579ot8A91jA%qEL%8%4e19N42803235425L8G61778889

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

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

  1. Python模拟登陆大连交通大学教务在线

    Python模拟登陆大连交通大学教务在线,使用wxPython做的界面,urllib2发送数据,可以实现登陆后获取首页登陆数据的功能,目前只做登陆,其他的暂时没做 Python2.7代码 # -*- ...

  2. 《python编程从入门到实践》python入门级-学习笔记(1-2章)——持续更新中

    CSDN的小伙伴们你们好~从今天起我开始自学编程了. 恭喜你关注到一个成长型账号. 一以来作为美术出身的TA,我无数次的向往能打出几行属于自己的代码.为了跟上时代的步伐,也为了能更加深入TA这个职业, ...

  3. Python学习小甲鱼视频做的笔记(持续更新中)

    Python BIF :Built-in functions(内建函数) Python与大多数其他计算机语言的做法稍有不同,他并不是把值存储在变量中,而更像是把名字贴在值的上边. 在使用变量之前,必须 ...

  4. Python和Scala和Java的语法对照表(持续更新中)

    泛型 Scala Java def func1(a:String,b:Long): Tuple2[String,Long] =   {     val random=new Random()     ...

  5. python爬虫获取强智科技教务系统学科成绩(模拟登录+成绩获取)

    python爬取强智科技教务系统,以江苏科技大学为例:本人开发的系统作为参考:https://www.wjn1996.cn/estudy/tools/educationLogin.jsp?school ...

  6. python3 + selenium 进行强智教务成绩的刷新以及通知成绩(华东理工大学 某ecust)

    强智教务自动刷新教务处成绩,更新后发邮件通知,以某ECUST华理为例子.此处的ECUST华理教务系统是18年9月后的新系统 Windows端或者挂在阿里云上都可以,下文示例是在Ubuntu上运行的. ...

  7. python模拟登陆 验证码el_python 模拟登陆github的示例

    # -*- coding: utf-8 -*- # @Author: CriseLYJ # @Date: 2020-08-14 12:13:11 import re import requests c ...

  8. python模拟登陆163邮箱并获取通讯录

    From: http://hi.baidu.com/fc_lamp/blog/item/2466d1096fcc532de8248839.html python模拟登陆163邮箱并获取通讯录 #-*- ...

  9. 模拟登陆新版正方教务管理系统【可以获取学生基本/课表信息】

    写在前面 博主登陆现在还可以正常使用,但是后面登陆成功,获取信息啥的有问题 登陆还是按照学长的来,模拟登陆新版正方教务管理系统 开始 学校教务系统改版,我直接copy博主代码获取学籍那里一直是获取到的 ...

  10. 潜心专研Python模拟登陆专题,实现网易云音乐自动签到!这项目居然只值三百?

    前言: 时隔三周没有和大家见过面了,最近在研究python模拟登陆专题,话不多说,让我们愉快地开始实现模拟登陆实现网易云自动签到 开发工具 **Python****版本:**3.6.4 相关模块: D ...

最新文章

  1. 基于Go语言来理解Tensorflow
  2. windows环境下安装neo4j
  3. linux基础篇-10,权限管理chown chgrp chmod umask
  4. Spring-Boot:5分钟掌握SpringBoot开发
  5. Windows系统下的Visual studio2019 安装 opencv4.5.1的安装
  6. 关于计算机专业的求职信英文怎么说,计算机求职信范文英文3篇
  7. 分析 H.265 + AAC 的 FLV 文件
  8. python绘制折线图怎么样填充空白颜色_Python:填补两幅图之间的空白
  9. jackson驼峰转下划线注解_jackson序列化与反序列化的应用实践
  10. Transformer可以不需要Softmax?Kakao提出了UFO-ViT,性能高,计算量还小
  11. 【第8篇】Python爬虫实战-批量删除csdn私信记录
  12. 23种设计模式(十五)接口隔离之适配器
  13. 什么软件可以压缩图片大小?这几个软件值得收藏
  14. 医院设备管理系统方案/案列/软件/APP/小程序/网站
  15. 【高等数学】微积分----教你如何简单地推导求导公式(二)
  16. 腾讯云CDN加速COS图床
  17. nali: 给dig,traceroute等命令的输出的ip附加上地理信息
  18. 报错Error configuring application listener of class jdbc.ContextListener 解决办法之一
  19. 关闭windows defender
  20. 【CSDN|每日一练】小艺的英文名

热门文章

  1. 动画:面试官问我 JS「变量提升」我头皮发麻,最后把这篇动画甩给了他
  2. html加拼音注释,古诗加拼音注释版.doc
  3. python海龟隐藏_Python海龟绘图——常用方法指令
  4. codeup 1006
  5. Java 读取Word中的脚注、尾注
  6. 艾睿电子Arrow EDI ORDERS订单解读
  7. 包引入中,在包名前使用下划线“_”
  8. 查看电脑ip地址、查看手机ip地址、根据域名查看ip地址
  9. 高等教育学:教育目的与教育制度
  10. 基于STM32F103单片机雾霾检测PM2.5检测空气质量检测除尘系统