最近开发关于学校服务类小程序,小程序后台需要从学校的系统获取到各同学的信息,所以语言优先选择了python,并用了Django框架。之前也有写过一些爬虫,但都是用其他语言写的。对python并不熟悉,所以这次开发踩了不少坑,也走了不少弯路。在这里总结一下,分享给同样有需要的人。

学校的登陆流程是这样的:

登陆流程图

正确登陆流程应该是上图的那样的,但是如果登陆错误是不会获取到302页的,而是直接返回登陆页,python获取到的状态码也是200。

在这里我就犯了一个很严重的错误,我一直以为我post登陆是正确的,从而把bug定位到【python获取不到302验证页】这个问题上,一开始先百度,得出的答案是在requests.post请求中添加allow_redirects=False来禁止网页重定向,我发现还是没有获取到302页,从而转向更底层的httplib和自定义自己的urlib的重定向类。发现还是不行,困扰了我一天,终于在我祭出fiddler之后,bug慢慢显现出来。

fd第一步:抓包

通过fd分别抓取浏览器和pycharm Post请求包

fd抓包

fd第二步:对比

pycharm_post表单

firefox_post表单

对比pycharm和浏览器向教务系统服务器发出的请求包内容发现,

username,password,imgcode以及cookies两边都是一样的

而user_lb这个字段两边不一样pycharm请求的是中文浏览器则是乱码

难道就是因为这个字段编码问题导致服务器验证失败?

接下来分析一下pycharm的编码

在python3中默认是Unicode编码,我们在使用requests发送post请求的时候,python会默认使用utf-8编码data表单数据,而学校的表单却是以gbk编码提交,是真的很奇葩,目前来说只有非常古老的网站才采用gbk编码了。

下面我们来改一下代码

postdata = {

'imgcode': input(),

'password':input(),

'user_lb':'学生',----> 'user_lb':'学生'.encode('gbk'),

'username':input(),

}

提示:在Python3中,decode是把二进制字符串解码成Unicode码,encode则是把Unicode码转换成对应的二进制字符串

修改完以后再一次验证

pycharm_post登陆

就此困扰了我两天的问题终于成功解决,拿到了sessid,之后通过设置相应的cookies便可以对学生信息页进行相应的操作了。

贴个登陆时序图方便理解吧

login时序图

总结:我最后只用了【.encode('gbk')】就解决了问题,所以说请求的时候,编码很重要,编码错误很可能导致服务端拿不到正确的请求内容,从而爬虫也接收不到正确的响应内容。

本文原创

python登录教务系统_记python登陆学校教务系统踩过的坑相关推荐

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

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

  2. python 爬虫登陆学校教务系统

    好像很多人写爬虫,都是从登陆学校教务系统开始的.为什么?学校教务系统渣啊,都是明文传输的,而且是200x年写的,没有用到很多现在的技术,所以相对来说容易些.感觉很多学校都是用的清元优软的这个,我们学校 ...

  3. python模拟登录教务系统_用Python实现模拟登录正方教务系统抢课

    最近学校开始选课,但是如果选课时间与自己的事情冲突,这时候就可以使用Python脚本自助抢课,抢课的第一步即是模拟登录,需要模拟登录后保存登录信息然后再进行操作. 而且整个流程是比较简单,这是因为正方 ...

  4. python抢课脚本 验证码_用Python实现模拟登录正方教务系统抢课

    最近学校开始选课,但是如果选课时间与自己的事情冲突,这时候就可以使用Python脚本自助抢课,抢课的第一步即是模拟登录,需要模拟登录后保存登录信息然后再进行操作. 而且整个流程是比较简单,这是因为正方 ...

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

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

  6. python课表查询系统_使用python抓取广西科技大学教务系统课程表

    因学校教务系统课程表查询功能累赘,服务器经常挂,同时也不适合手机端查询,所以用python开发爬虫抓取所有课程表,放到我的服务器上面. 本文仅供学习. 特性 中途退出程序再次运行不会抓取到重复课程表 ...

  7. 利用Python requests库模拟登陆学校教务系统

    在研究了一会requests库的实现之后.发现requests的确非常强大.. 几行代码就登陆上了学校的教务系统,但也许是我们学校的教务系统做的太烂了吧23333.动不动就血崩. 下面是代码. imp ...

  8. python飞机票预定系统_数据库课程设计 - 机票预订系统

    一.机票预定系统 1.1 题目要求 要求具备如下基本功能 班机基本信息的管理: 航班信息的管理: 旅客预定机票.取消预约.付款取票.退票的管理: 查询航班信息.航班预定情况.旅客信息,计算航班满座率. ...

  9. python自动排课表_利用python爬取广西科技大学教务管理信息系统班级课表

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

最新文章

  1. Java基类共同属性设置_java – 你有一个Hibernate实体的基类吗?
  2. mysql安装教程博音网_RTSP视频平台EasyNVR使用mysql数据源启动报错unknow drivermysql优化...
  3. windows 安装 reviewboard
  4. 成功解决.append方法出现错误IndexError: list index out of range
  5. 【视觉项目】【day4】8.24号实验记录(消除瓶子内部“边缘”)
  6. 价值投资/指标选股(akshare)
  7. 检查列表中的所有元素在Python中是否相同
  8. centos 安装mysql客户端_linux下mysql的yum源安装/配置/卸载
  9. fastjson.JSONObject之对象与JSON转换方法
  10. RHEL 7.6 安装 Oracle 18c RAC
  11. sql server 中某个字段值合并【转】
  12. 电脑连接安卓手机摄像头的方法(含DroidCam安装包及简明使用教程)
  13. ICEM: 合并混合网格
  14. 针对校园LAN的OpenFlow和软件定义网络
  15. TP-LINK路由器手动设置网关、DNS、开启DHCP并指定地址池IP范围
  16. 2.4 旋转曲面 (1)
  17. 2007网吧经营攻略之技术完全篇
  18. 操作系统——文件管理
  19. java分布式技术平台架构方案
  20. Adversarial Attack on Attackers: Post-Process to Mitigate Black-Box Score-Based Query Attacks

热门文章

  1. 三极管三种放大组态的比较?为什么共基频带宽呢?(硬件每日一题)
  2. bga封装扇出_0.5间距BGA封装,怎么扇出啊
  3. 那些年,我们一起写的情诗
  4. 电商平台基础指标体系
  5. 用python画雪人-萌系新潮玩,唱多多小雪人麦克风天猫独家首发
  6. 数模国赛历年题目 1992——2021
  7. 图像特征提取与匹配之SIFT算法
  8. js qs序列化数据 npmi qs --save
  9. Vitamio直播框架的简单使用
  10. 学术期刊划分(教你认识SCI、EI、SSCI、IEEE、CSSCI...)