失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 基于Python实现校园网自动登录

基于Python实现校园网自动登录

时间:2020-03-11 02:07:54

相关推荐

基于Python实现校园网自动登录

关键词:树莓派;ubuntu;定时执行;登录校园网

背景

在上一篇文章《利用树莓派搭建校园网种子站》的最后,我们提出一个问题,校园网的登录要实现自动化,本文提供的思路为:使用crontab编写任务定时执行python脚本文件,python脚本文件的功能是检测系统是否连接ipv4网络,没有的话则连接至网络。下面是具体的实践方案。

废弃的方案

刚开始想的方案是使用python的第三方库beautiful soup,网络爬虫神器,但是发现只能爬取网页的内容,并线下对网页内容做提取数据分析等操作,没办法在线对网页进行交互,于是搜索发现另一个神器selenium(浏览器自动化测试框架),有打开关闭浏览器,在指定html元素位置填入数据,模拟点击等功能。并实现了该方案,其中在浏览器的driver上费了些时间,使用firefox和chromium使用不同的driver,下面给出一些有用的参考连接:

/mozilla/geckodriver/releases?after=v0.16.1

/u/2396236/blog/1790075/

/mirrors/chromedriver/

后发现了requests,甚是方便,相见恨晚。抛弃selenium,重头再来。

python 自动化脚本

比较简单,定义两个函数,一个是检测现在系统是否连接至ipv4网络,另一个函数的功能是对指定的校园网网址进行post操作。

1 检测系统是否联网

# 函数1:测试网络是否连通import socketdef is_net_ok():s=socket.socket()s.settimeout(3)try:status = s.connect_ex(('',443))if status == 0:s.close()return Trueelse:return Falseexcept Exception as e:return False

其中:

s.connect(address)连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。s.connect_ex(address)同上,只不过会有返回值,连接成功时返回 0 ,连接失败时候返回编码,例如:10061

2 自动登录校园网

主要用到的函数为

result = requests.post(url, data=dict)

首先扒一扒校园网登录页面,点击登录,F12查看抓包结果,其中POST为主要查看对象。

可以看到只有一个POST方式的文件auth_action.php,具体查看post了哪些数据。

内容有方式、学号、密码还有其他,其中密码不是明文,这个密码应该是加密的,在所有js文件中搜索password,发现有一处函数,验证了是base64加密方式。

于是可以开始着手写代码了。

# 函数2:登录指定网络import datetime,requests,base64LOGIN_PAGE_URL = "https://gw.:804/beihanglogin.php?ac_id=1&url=http://gw.:804/beihangview.php"def login_request(name , password):if not is_net_ok():print("[03] {} raspberry is offline , request now... ".format(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))password = base64.b64encode(password.encode()).decode() # 加密data1 = {"action": "login","username": name,"password": password,"ac_id": 1 ,"save_me": 0,"ajax": 1}try:result = requests.post(LOGIN_PAGE_URL, data = data1)print(result.text)# print("[01] {} login success ".format(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))except:print("[00] {} requsest error ,raspberry isnot connected to WIFI ".format(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))else:print("[02] {} raspberry is online ".format(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))

运行却登录密码错误。

密码错误?难道密码加密有误?那么不加密呢?把password = base64.b64encode(password.encode()).decode()注释掉再次运行。

完美,result结果返回 login_ok ,登录成功,yeah~后面还一堆什么字符串,哎呀不管了,反正可以顺利登录了。

测试其他情况:

断开无线网

联网之后

没问题,下面分析如何定时执行该脚本。

ubuntu 系统定时执行任务

使用ubuntu的命令:crontab

关于crontab的介绍和使用说明可以参考:/yiyezhouming/p/7799482.html

打开终端输入sudo crontab -e使用vim编辑器,输入以下代码,表示每两分钟运行 py文件,并将日志输出至 log 文件。

*/2 * * * * python3 /home/sai/buaa_auto_login/buaa_auto_login.py >> /home/sai/buaa_auto_login/buaa_auto_login_log.log 2>&1

保存并关闭

在终端输入sudo crontab -l可看到自己编辑好的文件。

这时去 /home/sai/buaa_auto_login/ 下看到 log文件,如下则说明定时执行python脚本任务设置成功。系统关机重启,crontab任务还会继续执行。(注:执行结果和函数2输出不一致是因为上述函数2为最后写的版本,这里测试时函数2还并未完全写完,因为我要亲自到学校里扒登录网页…)

小结

毕业了竟然厚颜无耻的回学校蹭网,还把校园网登录页面给扒了一遍,罪过罪过。本文主要分析了python自动化脚本登录方案和ubuntu定时执行任务实现完成校园网的自动登录功能,以上内容结合上篇文章《利用树莓派搭建校园网种子站》实现校园网种子站的全部功能。当然有诸多改进的地方,还望指点。同时与此类似可以实现其他形式的自动化方案,比如自动登录邮箱,查收发邮件等等。

二赛君原创文章,转载请注明出处。

参考

http://docs.python-/zh_CN/latest/user/quickstart.html

/fengmm521/article/details/79469113

/u010651394/article/details/82975266

更新:代码Github地址:/ersaijun/Campus_Network_AutoLogin

如果觉得《基于Python实现校园网自动登录》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。