python爬虫正方教务系统许昌学院
来自许昌学院的大四小菜鸡,疫情封在宿舍,闲来无事在宿舍爬了一下之前没成功的教务系统爬虫,当时觉得挺难的,今天发现这个还是挺简单的,这个程序参考了很多前辈大佬们的程序和思路,我也给代码发出来方便各位拿来学习交流,有什么不懂的地方欢迎在评论区留言,看到留言我会第一时间回复

爬取数据流程

1.找到目标网站

我们学校用的是新版正方教务系统,长这个样子,相信也有不少同学学校用的同款的教务系统,一到选课贼卡,还老是挂(吐槽一下)

2.抓包接口

网页抓包相信很多童鞋是会的,这里我用浏览器自带的抓包工具,我用的是win10自带的Edge
F12打开浏览器开发者工具,点击网络,先输入一个错的账号密码,查看抓包情况

可以看到有一个post请求,点开查看

这不就是用户名还有加密后的密码吗??,再通过接口名也不难看出,这是一个接口
那这个密码应该怎么加密呢?
我们再js代码里面找找

看这里引入的加密库,是rsa加密,那么现在我们要做的就是获取公钥,对密码进行加密.

还是刚刚抓到的接口,里面有一个链接:

3.登录参数分析

有了这个公钥接口,我们就能对密码进行加密了,不过在写程序的时候发现一个坑.就是那个exponent好像并没什么用,我也不知道咋回事,反正参考了前辈的代码发现并没用上,而且他也在这个地方被坑住了.
有了这些,登录需要提交的参数我们都已经知道三个了,分别是language(语言),yhm(用户名),mm(加密后的密码),还差一个csrftoken,这个参数在哪里找呢?

别急,这个参数也很简单,右键打开网页源码 CTRL+F搜索csrftoken,会发现原来这个参数就在登录主页里面

4.程序流程思路分析

1.创建一个13位时间戳方便后续使用
2.创建一个session会话
3.添加访问教务系统必要的header请求头
4.获取公钥
5.通过公钥对明文的密码进行加密
6.获取csrftoken
7.通过session.post进行登录

经过以上步骤,我们拿到的session对话就获取了访问成绩接口的权限,理论上就可以为所欲为了,比方说可以做一个查成绩的小网站,抢课小程序什么的.

编写代码

到此为止,我们需要的参数已经全部找到,程序思路也分析完,接下来就是写代码环节

5.程序代码

#获取公钥https://jwglxt.xcu.edu.cn/jwglxt/xtgl/login_getPublicKey.html?time=1669947527543
#登录接口https://jwglxt.xcu.edu.cn/jwglxt/xtgl/login_slogin.html?time=1669947499740
import requests
import re
import time
import binascii
import rsa
#密码加秘密函数
def get_encrypted_password(pw,m):weibo_rsa_e = 65537message = str(pw).encode()rsa_n = binascii.b2a_hex(binascii.a2b_base64(m))key = rsa.PublicKey(int(rsa_n, 16),weibo_rsa_e)encropy_pwd = rsa.encrypt(message, key)the_enpassword = binascii.b2a_base64(encropy_pwd)return the_enpassword
passusername = '学号'
password = '密码'
#获取当前13位时间戳
t=str(int(time.time()*1000))
#创建session会话
session=requests.session()
#设置请求头
session.headers.update({'Accept': 'text/html, */*; q=0.01','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0','X-Requested-With': 'XMLHttpRequest','Connection': 'keep-alive','Content-Length': '0','Content-Type': 'application/x-www-form-urlencoded','Host': 'jwglxt.xcu.edu.cn','Referer': 'http://jwglxt.xcu.edu.cn/jwglxt/xtgl/index_initMenu.html?jsdm=&_t=' + t,'Upgrade-Insecure-Requests': '1'
})
#获取公钥
publicKey_url='https://jwglxt.xcu.edu.cn/jwglxt/xtgl/login_getPublicKey.html?time='+t
r=session.get(publicKey_url)
publicKey=r.json()
#对密码进行加密
enPassword = get_encrypted_password(password,publicKey['modulus'])
#获取csrftoken
loginPage_url='https://jwglxt.xcu.edu.cn/jwglxt/xtgl/login_slogin.html?time='+t
loginPage=session.get(loginPage_url)
loginPage.encoding = 'utf-8'
csrftoken = re.search('name="csrftoken" value="(.*?)"', loginPage.text).group(1)
#登录信息
LoginData={'csrftoken': csrftoken,'language': 'zh_CN','yhm':username,'mm': enPassword,'mm': enPassword
}
#登录
res=session.post('https://jwglxt.xcu.edu.cn/jwglxt/xtgl/login_slogin.html?time='+t,LoginData)
print("============================================================================")
if re.findall('用户名或密码不正确',res.text):print('用户名或密码错误,请查验..')
else:print("登陆成功")
pass
#查询全部成绩
cj=session.post('https://jwglxt.xcu.edu.cn/jwglxt/cjcx/cjcx_cxXsgrcj.html?doType=query&gnmkdm=N305005&su='+username,
{'xnm': '','xqm': '','_search': 'false','nd':t,'queryModel.showCount': 15,'queryModel.currentPage': 1,'queryModel.sortName':None,'queryModel.sortOrder': 'asc','time': 5
})
cjj=cj.json()
print(cjj)
#关闭会话
session.close()

python爬虫学校正方教务系统获取全部成绩相关推荐

  1. 用Python登陆新版正方教务系统获取课程表(及RSA加密密码实现)

    前言 最近做一个微信小程序,需要登录教务系统.提前用python尝试一下登录接口,并获取到课表打印出来. 我们学校用到新版正方教务系统,长这个样子. 相比旧版的教务系统,唯一好处是不用输入二维码方便爬 ...

  2. python爬虫登录正方教务管理系统获取成绩数据

    本程序以四川理工学院教务管理系统为例.... 准备工作:1.ruquests库的使用(或者urllib也可行) 2.正则表达式的书写 3.HTTP通信基础 4.一些解析库的使用 准备一个浏览器监视工具 ...

  3. 我的第一个开源项目:Java爬虫爬取旧版正方教务系统课程表、成绩表

    Java爬虫爬取旧版正方教务系统课程表.成绩表 一.项目展示 1.正方教务系统 首页 2.爬虫系统 首页: 成绩查询: 课表查询: 二.项目实现 1.爬取思路描述 无论是成绩查询或课表查询亦或者其它的 ...

  4. Java--使用httpClient模拟登陆正方教务系统获取课表

    最近形如课程格子与超表课程表应用如雨后春笋般涌现,他们自动获取课程表是怎么实现的呢.于是我用Java实现了一下模拟登陆正方教务系统获取课表的过程. 首先,我们先了解一下网站登录的原理:当我们输入学号, ...

  5. Python实现新版正方教务系统爬虫(二)

    前言 哎对不起 我可能是silly boy 我想在学校里把去年的坑填了 但是发现新版的教务系统代码没传到git上 我现在就成了个对着空ide发呆的憨憨(代码在家里啦 所以填坑就再过会吧 那就稍微闲聊一 ...

  6. python 绕过国科大教务系统获取所有学生成绩

    python 绕过国科大教务系统爬取十万学生成绩 我发现国科大的教务系统有 bug,今天早上我绕到后台,用 python 爬取了国科大在读和已毕业所有人的成绩,包括本科生和研究生.因为涉及隐私,我也就 ...

  7. python二级成绩查询入口官网_python爬虫实战之模拟正方教务系统登录查询成绩

    最近由于某些需要,开始入门Python网络爬虫,想通过一个Python程序来访问正方教务管理系统并且抓取到期末的成绩,由于我并没有深入了解过过其他的编程语言,所以,也比较不出Python和其他语言(如 ...

  8. python爬虫实战之模拟正方教务系统登录查询成绩

    最近由于某些需要,开始入门Python网络爬虫,想通过一个Python程序来访问正方教务管理系统并且抓取到期末的成绩,由于我并没有深入了解过过其他的编程语言,所以,也比较不出Python和其他语言(如 ...

  9. Android正方教务系统课程表+查成绩+查考试安排

    超级课程表超慢的启动速度+5s广告+多余的无用功能+广告推送通知实属让人心烦 练手app,附加超级课程表没有的查询考试安排功能,考试成绩更加直观 (该项目很久不维护了,只提供思路,项目中url是学校教 ...

最新文章

  1. 技术08期:十大经典数据挖掘算法【PageRank篇】
  2. Visual Studio 2017 15.8概览
  3. i-i.me:网址导航真的是伪需求吗?
  4. mysql jion 三张_mysql三张表 left join
  5. activemq使用linux内核机制,activemq基础之:(四)CentOS7 Linux搭建activemq
  6. python基础教程3下载-Python基础教程第3版中国PDF电子书免费下载
  7. python+grpc+yolo 目标检测实践
  8. R语言:医药股票数据分析
  9. android聊天软件开发,实战篇(1)
  10. 【VTK】装配体Assembly的使用
  11. python 顺序读取文件夹下面的文件(自定义排序方式)
  12. Scroller的用法和一些理解
  13. 总结 拦截器(Interceptor) 和 过滤器(Filter)的区别
  14. OCR技术(光学字符识别)
  15. python斐波那契数列第四十项_传统文化的数学基础(四)--论八卦、五行、天干地支、二十四节气、洛书与黄金分...
  16. 不同软件求解超导温度用的方程
  17. 从下载镜像到装系统(MSDN 和软碟通)
  18. 痘印服务器维护,脸上有痘印怎么弄才能消除
  19. 微信小程序之wx.getLocation再次授权问题解决
  20. 平安城市,天网工程,雪亮工程这三者的区别

热门文章

  1. robocup3d仿真平台的安装
  2. 一些小软件闪退的解决方案
  3. BilSTM 实体识别_NLP-入门实体命名识别(NER)+Bilstm-CRF模型原理Pytorch代码详解——最全攻略
  4. 软件开发中的《清单革命》
  5. 从服务器基础环境配置到搭建Docker+Gitlab+Gitlab Runner,完整介绍Spring Boot项目的持续集成与持续交付具体实现!
  6. Spring Cloud 异常“ Caused by: java.net.UnknownHostException: discovery.host ”
  7. PTA】{10-1 结构拓展实验,函数}6-3 求某学生8门课的平均分 (10 分)
  8. 在受控主机上创建文件或目录
  9. Android屏幕上涂鸦画笔标记的实现
  10. Codeforces 517 #A