最近学校开始选课,但是如果选课时间与自己的事情冲突,这时候就可以使用Python脚本自助抢课,抢课的第一步即是模拟登录,需要模拟登录后保存登录信息然后再进行操作。

而且整个流程是比较简单,这是因为正方教务系统是比较旧的,全文的IP地址部分遮挡,请换成你们学校的IP地址。

尝试登录

首先我们打开学校的教务系统,随便输入,然后提交表单,打开Chrome的开发者工具中的Network准备抓包

把css 图片之类的过滤掉,发现了default.aspx这个东西

如果你们学校教务系统不使用Cookie则会是这样

随后我们发现这个网址括号围起来的一串信息有点诡异,而且每次进入的时候信息都不一样,经过资料查询,这是一种ASP.NET不使用Cookie会话管理的技术。

那这样就很好办了,我们只需要登录时记录下这个数据即可保持登录状态。

经过测试发现,我们可以随便伪造一个会话信息即可一直保持登录状态,但是为了体现模拟登录的科学性,我们需要先获取该会话信息。

如果你们学校教务系统使用Cookie则会是这样

服务器会返回一个Cookie值,然后在本地保存,这与下面的会不相同。

获取会话信息(不使用Cookie)

这里我们要使用requests库,并且要伪造header的UA信息

经过测试发现,我们只访问学校的IP地址,会自动重定向至有会话信息的网址,所以我们先访问一下IP地址。保存为这样的格式是因为我们要访问其他地址。

获取会话信息(使用Cookie)

有些学校的教务系统是使用Cookie的,我们只需要首次get请求时保存Cookie即可,然后此后一直使用该cookie

验证码的处理

分析r返回的文本信息

发现验证码的标签的资源地址为 src=”CheckCode.aspx” ,我们可以直接requests然后下载验证码图片,这样验证码就展示出来了,我们人工输入或者转入打码平台皆可。

登录数据的构造

这是上面抓的登录post的数据包,

发现有信息无法被解码,应该是gb2312编码,查看解码前的编码

然后将不能解码的代码复制能够解码的地方

发现%D1%A7%C9%FA编码解码后为学生

这也就对应了学生选项的登录

学号和密码和验证码能够显而易见地知道是哪些信息,但是我们发现有__VIEWSTATE这一项

查找一下,这是一个表单隐藏信息,我们可以用BeautifulSoup库解析可以得出该一项数据的值

登录

如果登录完成了,如何判断是否登录成功呢?我们从登录成功返回的界面发现有姓名这一标签,而我们等一下也是需要学生姓名,所以我们用这个根据来判断是否登录成功。

获取选课信息

接下来就是获取选课信息了,这里我们以校公选课为例子,点击进去,进行抓包,headers没有什么好注意的,我们只用关注get发送的包即可

发现有学号与姓名与gnmkdm这一项,姓名我们需要编码为gb2312的形式才能进行传送

模拟选课

随便选一门课,然后提交,抓包,看一下有什么数据发送

前三个值可以在原网页中input标签中找到,由于前两项为空,就不获取了,而第三项我们使用soup解析获取即可,由于这个操作是每请求一次就变化的,我们写成一个函数,每次请求完成就设置一次。

TextBox1为搜索框数据,我们可以用这个来搜索课程,dpkcmcGrid:txtPageSize为一页显示多少数据,经过测试,服务器最多响应200条。

值得注意的是ddl_xqbs这个校区数据信息,我所在的校区的数字代号为2,也许不同学校设置有所不同,需要自己设置一下,也可以从网页中获取

下面是基础数据包,由于我们搜索课程与选择课程都要使用这个基础数据包,所以我们直接在init函数里面新增,然后我们关注一下这条数据,我们搜索一下,发现这是课程的提交选课的代码,所以我们也可以直接从网页中获取,而on表示选项被选上

搜索课程

课程有很多信息,比如名字,上课时间,地点,这些东西确定好了才知道选的是哪门课,所以我们先新建一个类来存储信息有了这个类,我们就可以进行搜索课程了,具体代码看下面代码,解析网页内容就不细讲了。

进行选课

选课我们只要将lesson_list传入即可,这就是我们之前创建的Lesson类的实例的列表,’Button’的内容为’ 提交 ‘,这两边各有一个空格,完事后我们可以进行发送请求进行选课。

这里我们用正则提取了错误信息,比如选课时间未到、上课时间冲突这些错误信息来提示用户,我们还解析了网页的已选课程,这里也不细讲了,都是基础的网页解析。

总结

这次我们完成了模拟正方教务系统选课的过程,由于这个教务系统技术比较陈旧,所以比较好弄,事实上抢课的时候用Fiddler即可完成操作,因为我们只需要提前登录然后记录网址即可。

python模拟登录教务系统_用Python实现模拟登录正方教务系统抢课相关推荐

  1. 基于python的排课表系统_利用python爬取广西科技大学教务管理信息系统班级课表...

    操作环境 python 3.6.1 pycharm 5.0.3 WampServer 3.0.6 windows 8(64位) 特点 1.中途退出程序或者断网之后重连再次运行不会抓取到重复的课程表 2 ...

  2. python模拟qq登录三方网站_使用Python模拟腾讯第三方认证-篇2

    序 上篇分析了模拟登陆的流程,以及HTTP请求和回应,下面我们开始编码实现. 编码 准备 安装requests, pip install requests 使用requests请求比使用urllib方 ...

  3. python爬取qq邮箱_使用Python模拟登录QQ邮箱获取QQ好友列表

    最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...

  4. python爬虫登录12306失败_使用python爬虫模拟12306登录方法

    试了好久登录的时候总是显示:系统忙,请刷新,,,太折磨人了,搞了半天才想到是请求头部的问题..... 验证码还是要人工识图..#!/bin/env python # -*- coding=utf-8 ...

  5. python商城系统_基于python的海鲜商城系统

    20006 基于python的海鲜商城系统 运行视频.代码等: 链接:https://pan.baidu.com/s/1tw4Qvtcuwt7ys36M7HvLSg 提取码:1589 复制这段内容后打 ...

  6. python登录代码思路_用python登录Dr.com思路以及代码分享

    用python登录Dr.com思路以及代码分享 发布于 2014-08-28 22:31:52 | 192 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是一种面向对 ...

  7. python实现高校教务管理系统_基于Python技术的教务管理系统的研究与开发

    龙源期刊网 http://www.qikan.com.cn 基于 Python 技术的教务管理系统的研究与 开发 作者:戴雯惠 来源:<价值工程> 2018 年第 27 期 摘要:随着教育 ...

  8. python爬虫设计在哪里_《python 爬虫教程 知乎》 怎样用Python设计一个爬虫模拟登陆知乎...

    <python 爬虫教程 知乎> 怎样用Python设计一个爬虫模拟登陆知乎 python 爬虫教程 知乎2020-09-23 01:45:13人已围观 怎样用Python设计一个爬虫模拟 ...

  9. python爬取豆瓣短评_用python实现豆瓣短评通用爬虫(登录、爬取、可视化分析)

    原创技术公众号:bigsai 前言 在本人上的一门课中,老师对每个小组有个任务要求,介绍和完成一个小模块.工具知识的使用.然而我所在的组刚好遇到的是python爬虫的小课题. 心想这不是很简单嘛,搞啥 ...

最新文章

  1. C# 利用WMI对象获取物理内存和可用内存大小
  2. validateJarFile jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/
  3. 【正一专栏】第1球和第500球价值一样
  4. 无法添加类型为“mimeMap”的重复集合项
  5. 商品品牌信息的增删改查操作步骤_javaweb09-Servlet增删改查
  6. css bug 集2
  7. java+mysql学生学籍后台管理系统源码
  8. ionic 组件之二维码扫描
  9. switch语句判断范围_MQL5从入门到精通【第四章】(一)条件判断语句
  10. ✨Shell脚本实现Base64 加密解密
  11. HC3i论坛电子病历系统热门资料30篇(二)(
  12. 深度置信网络简要介绍
  13. CesiumJS 中文学习手册
  14. 网页动态背景:随鼠标线条变动
  15. Android TimePicker
  16. BZOJ2038: [2009国家集训队]小Z的袜子(hose) 莫队算法 莫队算法讲解及时间复杂度证明
  17. 微信广告转化归因几个坑 gdt_vid和clickid
  18. vue2 与 vue3 生命周期对比
  19. 橄榄核雕:始知真放在精微
  20. RNN attention model intution

热门文章

  1. Docker安装Tomcat镜像并部署web项目简述
  2. Linux-Logs 查看日志文件
  3. 图像视频伪造检测,针对DeepFake技术检测效果不佳
  4. Flutter绘制指南06-颜色的基本操作
  5. 第7章 网站前台-吐槽与问答
  6. 用pandas批量分组处理excel数据
  7. 优化方法之黄金分割法(Python实现)
  8. 建筑智能化资质办理要求
  9. 韩版机泛泰A850去除漫游时拨号选择框
  10. GSM Channel Mode Modify和Channel Mode Modify Acknowledge信令