学校平台的模拟登陆和相关操做

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

运行环境前端

  • python 3.7.4
  • requests 2.10.0

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

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

咱们学校师生服务平台的一些状况

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

而后还有一点比较坑的就是因为第三方的平台比较多,密码也比较多,有的同窗应该深有体会。json

后来咱们学校的登陆终于改用统一认证了。除了老教学平台,基本均可以采用统一的密码。如今新的教务由金智教育提供技术支持。新教务其它的不说,界面确实好看多了。目前存在的一些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点,因此我就把抢课脚本放在服务器上去跑。否则还要设置电脑自动开机,还要让电脑免密登录,太不安全了。

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

相关文章
相关标签/搜索