学校平台的模拟登录和相关操作

写在最前:互联网并非法外之地,爬虫仅供技术交流

运行环境

  • python 3.7.4
  • requests 2.10.0

这次想分享一下关于学校教务,教学平台,以及学校公众号上面的web应用如何模拟登录。为了学校服务器的安全,本篇随笔不会曝光太多关于本校的信息,也不公布具体的代码,有意愿交流技术的可以继续看哦。

我觉得掌握相应的技术去做一些自动化的东西无可厚非。但前提是对其他人的权益还是要尊重的,对学校的服务器也要量其力而行的。

我们学校师生服务平台的一些情况

我们学校以前的教务和教学平台是由优慕课提供的技术支持。教学平台有一个比较一言难尽的地方就是它下载课件是不能全选下载的,而且每一个课件都必须点进预览页面再点下载。所以我之前就写了脚本让他一次性下载,就比较方便一些。

然后还有一点比较坑的就是由于第三方的平台比较多,密码也比较多,有的同学应该深有体会。

后来我们学校的登录终于改用统一认证了。除了老教学平台,基本都可以采用统一的密码。现在新的教务由金智教育提供技术支持。新教务其它的不说,界面确实好看多了。目前存在的一些bug也是学校数据库对接的问题。

然后关于图书馆,疫情回来后,我们学校的图书馆需要在线预约了。本来我们图书馆就有一个公众号,这次是在公众号上添加一个web应用来给我们预约座位,技术支持是利昂软件。不过体验感不怎么样,自己就写了自动化的脚本去预约座位。

大致的介绍

我们学校的这些系统大部分采用的都是session来鉴权。流程就是在服务端开辟一个session,session里面放相应的个人信息,然后把session的标识jsessionid传到前端存到cookie里面。每次请求的时候再带上,到对应的session里面取到个人信息后到对应的数据表里面做操作。

所以爬取的流程就都是一样的啦,先模拟登录获得jsessionid,然后就可以用这个jsessionid做很多你在网页端可以做的事情。

插入一段对selenium的评价

我们之前爬虫课的老师推荐了selenium用来做模拟登录,但是我使用过后还是很想吐槽一下它。

从爬虫的角度来说,如果满分是10星,selenium我个人觉得给个2星。

  • 不推荐selenium的第一个点——只要自己对http协议的理解够深,requests是可以实现和selenium一样强大的功能的。

    在知乎上曾经看过有人问这样的问题。

    py爬虫的话,selenium是不是能完全取代requests?

    既然两者都可以直接get到源码,requests只能爬静态页面,而selenium不但能获得js动态给出的源码,模拟真实登录也减少了反爬的限制。

    其实模拟登录这些requests是可以做的,动态的东西分析接口也是可以爬的。而且requests其实可以更灵活地隐藏自己,selenium其实更容易被反爬。

  • 不推荐selenium的第二个点——selenium不适合爬虫,更适合测试。

    selenium这个东西它本来的定位也是web自动化测试工具,拿来测试无疑是一个利器。但是在爬虫方面,它无法过滤过多的冗余信息,而且拖着浏览器内核在跑,效率十分低下。

  • 不推荐selenium的第三个点——用selenium不如用js脚本。

    如果说确实遇到了requests解决不了的问题,不得不采用拖着浏览器来跑的方法,那为什么不使用js脚本。selenium的核心部分其实也是用js来写的。而且用js脚本才是躲避反爬机制更科学的方法。

我们学校统一认证的登录接口

我们学校有两种认证方法,一种是账号密码,一种是手机号验证码。

账号密码流程

  1. 用户每次向登录界面发送get请求时,都会返回相应的html文档,其中会带一个名为lt的随机变量。

  2. 前端获得用户输入的账号密码后,结合lt进行des加密。

  3. 组合成json格式的数据post给后端。

  4. 后端接收后开辟一块session空间,存的应该是我们的学号和姓名,然后返回jsessionid给前端。

  5. 前端将jsessionid存在cookie里,至此登陆成功。

  6. session我们学校是用安全退出来close的,至此退出成功,它具体可以保存的最大时间是多长,我倒是没有试过。

每次看到安全退出我都挺想笑的,这是在说直接关闭浏览器或者窗口是不安全的。但是安全这个词真的很难有警示作用,就像安全帽一样,我觉得改成防危险帽可能戴的人就多了。

手机验证码流程

  1. 我们学校采用的是学号作为用户,通过学号去后端拿手机号并且发送短信。
  2. 前端获得用户输入的账号和验证码后,结合lt进行des加密。后面就跟账号密码流程是一样的啦。

我们学校老教务和教学平台的登录接口

老教务和教学平台的登录也差不多,而且更简单。老教务和教学平台账号密码的传输还更不安全,用的http协议,传的还是明文。

虽然老教务要验证码登录,但是它的验证码识别非常简单,用没有经过再训练的pytesseract就可以达到很高的识别率。

上图给大家感受一下:

img

我们学校图书馆公众号的web应用

本来我是想自己去做一个公众号的web应用去嵌入公众号里面来做一些尝试的,然后更好地跟大家分享这个过程,但是奈何我只是个个人账户。

但是我们学校图书馆的这个预约座位的web应用也是很容易分析的。虽然说它不让我们通过浏览器打开啊。但还是有两种方式可以来分析啊。

image-20201010105045617

  • 一种是用抓包工具。

  • 另一种就是天下武功,唯快不破了。你只要足够快,在浏览器符号变灰之前点中它,就可以在浏览器端打开啊。但这个方法并不是通用方法啊,有一些web应用后端还会做其它鉴权,所以在浏览器不一定打得开。而且我也不太清楚这是不是只是微信mac端的bug啊。

    image-20201010105105437

反正抓包肯定是没有问题的。

我们图书馆的链接是个久链,对于每个用户来说,就只有sn不一样,openid在获得sn后就是个摆设。所以只要拿到任意一个人在我们学校图书馆公众号的sn,就可以用他的账号做相应的操作。

我们学校抢后天座位的时间是每天早上7点,所以我就把抢课脚本放在服务器上去跑。不然还要设置电脑自动开机,还要让电脑免密登陆,太不安全了。

这次也算是对学校用的第三方产品做一个比较吐槽吧。

原文地址:https://www.cnblogs.com/xuanyu-10-18/p/13871511.html