Min教你CAU一键上网

到了新学校,搞不了什么大新闻,那至少也得完成点小目标。
一直觉得校园网这种登录方式浪费时间,打开浏览器,输入密码再跳转再输入,麻烦的不行。像哥这种日理万机的人,哪有时间干这种小事。于是前几周我花了一点下午的时间终于把这个自动登录的脚本写好并打包。
把整个思路记录梳理一下。


Simulation

一般写爬虫的思路就是模拟浏览器的行为,cau的登录方式大致也还比较简单。

一打开浏览器,自动跳转至my.cau.edu.cn:

之后点击左下角公共服务中的网络服务,进入了中国农业大学网络综合服务平台。

左边的网关登录,输入自己的账号密码即可。
登陆成功,显示网页:

整个过程基本如此。


Analysis

发现登录这一步其实是向http://202.205.80.10/post你的账号及密码:

之后再gethttp://202.205.80.10/的内容。
登录成功后网页有几个重要的信息,我们要获取它,比如名字,使用时间,使用流量等。

查看网页源代码,找到这几个信息的位置,获取它们即可。


Coding

1
2
3
4
from bs4 import BeautifulSoup
import requests
from time import sleep
from tqdm import tqdm

导入需要的模块,这里用了RequestsBeautifulSoup,用来操控浏览器及网页信息获取。
为了使界面好看有意思一些,我还使用了一个进度条模块tqdm(虽然并没有必要)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
try:
url = "http://202.205.80.10/"
send_headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36',
'Accept':'*/*',
'Connection':'keep-alive',
'Host':'202.205.80.10'
}
r = requests.post(url, headers = send_headers, data= {'DDDDD':username, 'upass':password, '0MKKey':'login'}, verify=False)
print("请求中...正在登陆......")
for each in tqdm(range(1,100)):
sleep(0.015)
except :
print ('出现错误...请联系管理员......')

requests.postdatapost到URL,DDDDD处为用户名,upass为密码。
这里except防止出现网络问题。

之后就可以获得网页上的信息了,但源代码上似乎找不到流量的信息,看了半天,原来需要自己计算。

1
2
3
4
5
6
7
8
9
10
flow0 = flow%1024
flow1 = flow-flow0
flow0 = flow0*1000
flow0 = flow0-(flow0 % 1024)
flow3='.'
if (flow0/1024)<10:
flow3='.00'
elif (flow0/1024)<100:
flow3='.0'
flow = str (int(flow1/1024)) + str (flow3)+ str (int(flow0/1024))

这样就可以了,再获取名字和使用时长的字段,最后po出来就行了。

如果我想要断开连接呢?于是我又在主函数后加上了一段:

1
2
3
4
5
6
7
8
9
10
11
12
13
while True:
co = input("(输入'N'断开当前连接:)")
if co == "N":
url = "http://202.205.80.10/F.htm"
send_headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36',
'Accept': '*/*',
'Connection': 'keep-alive',
'Host': '202.205.80.10'
}
ss = requests.get(url, headers=send_headers)
print ("已断开当前连接...")
break

这里是一个死循环,只有输入的字符为N才能跳出循环,即断开连接。


Packaging

好东西不能独享,但别人电脑也不一定有装Python啊,于是上网找了个PyInstall用来打包成exe文件。

1
2
3
4
5
f = open("账号密码.txt", "r")
content = f.read()
fs = content.find('username:') + len('username:')
username = content[(content.find('username:') + len('username:')):(content.find("\n",fs))]
password = content[(content.find('password:') + len('password:')):]

又在主函数前加了储存账号密码的一段程序,将账号密码.txt放在与此程序一个目录下,格式为:

1
2
username:#你的账号
password:#你的密码

程序每次启动时自动读取就行了。


testing

因为是命令行程序,毕竟难看了点:

但还是很好用哒!给实验室几个师兄用了一下,都说好:-)

Yumin Huang wechat
快来订阅我的公众号吧-,-
坚持原创分享,来支持一下作者吧~