Python实现自动登录校园网并且维持校园网登录状态教程
程序登录
获取连接请求链接
更正:登录请求连接一样 不需要获取了 可以直接跳转到代码部分
更新 :直接创建bat脚本调用python也可实现(推荐)
校园网宿舍区连接方式是post进行连接
进入http://172.168.254.6/ 输入账号密码和选择连接方式 然后
先不要点击登录 先进入控制台清理界面
然后点击登录
将请求网址记录下来
代码
安装库
requests 这个库主要是用来向目标网页发送请求
方法一:可以在 cmd 下使用命令下载安装:
按下 WIN+R 组合键,然后在弹出的窗口中输入 cmd ,再按下回车
在 cmd 中输入:pip3 install requests
然后回车即可,等待下载完成
方法二:可以在 Pycharm 里安装这些库
编写代码
填写自己的username 和pwd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import requests import socket
#此处根据自己校园网Form Data中发送的数据进行更改 username = '123456@yidong' # 格式学号@登录方式 联通@unicom 电信@telecom 移动 @yidong pwd = '123456' # 校园网登录密码 om = '123456' #不用管 #获取计算机名称 hostname=socket.gethostname() #获取本机IP ip=socket.gethostbyname(hostname) print(ip) # 登录地址 post_addr = "http://172.168.254.6:801/eportal/?c=ACSetting&a=Login&protocol=http:&hostname=172.168.254.6&iTermType=1&wlanuserip="+ip+"&wlanacip=172.168.254.100&mac=000000000000&ip="+ip+"&enAdvert=0&loginMethod=1"
post_data = { 'DDDDD': username, 'upass': pwd, '0MKKey': om } # 发送post请求登录网页 requests.post(post_addr, data=post_data) print("login success!")
|
执行程序 验证
刚才我们在获取请求链接的时候登录成功了 先注销登录验证使用程序是否能够连接
进入http://172.168.254.6/
点击注销登录
PyCharm 在终端运行
然后随便进个网页验证是否连接成功
校园网持久化
经过上面的步骤,我们可以实现程序登录校园网
但是,有时候校园网过了一段时间会自动断开,这时候又需要我们在浏览器中输入账号密码来登录
我们的时间非常宝贵,不能浪费在登录校园网这种事情上
所以这就是本小节的内容:校园网持久化
原理
思路:
1.判断是否连接上校园网
如果已连接,那么什么也不做
如果没有连接到校园网,那么开始连接校园网
2.将上述逻辑放入死循环中,让它一直执行
校园网页面的源代码中<title>
标签为:注销页
这时断开校园网,再重复上述操作
可以看到校园网页面源代码中的<title>
标签为:校园网登录页
接下来就简单了:
注销页 = 已登录校园网
校园网登录页 = 未登录校园网
我们只需要去获取到这个<title>
标签,然后判断是哪种情况即可
代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| # _*_ coding : utf-8 _*_ import re # 正则表达式,用于匹配字符 import requests import socket
#此处根据自己校园网Form Data中发送的数据进行更改 username = '123456@yidong' # 格式学号@登录方式 联通@unicom 电信@telecom 移动 @yidong pwd = '123456' # 校园网登录密码 om = '123456' #不用管 #获取计算机名称 hostname=socket.gethostname() #获取本机IP ip=socket.gethostbyname(hostname) print(ip) # 登录地址 post_addr = "http://172.168.254.6:801/eportal/?c=ACSetting&a=Login&protocol=http:&hostname=172.168.254.6&iTermType=1&wlanuserip="+ip+"&wlanacip=172.168.254.100&mac=000000000000&ip="+ip+"&enAdvert=0&loginMethod=1"
post_data = { 'DDDDD': username, 'upass': pwd, '0MKKey': om } schoolWebURL = 'http://172.168.254.6/' while(True): # 正则表达式,匹配<title>标签中的内容 response = requests.get(schoolWebURL) pattern = re.compile('<title>(.*?)</title>', re.S) title = re.findall(pattern, response.text) title = title[0] # 将格式转为字符串
if title == '注销页': # 根据上面的分析填入相应的字符 pass else: # 发送post请求登录网页 requests.post(post_addr, data=post_data) print("login success!")
|
现在你可以运行代码,然后再断开校园网,看它是否能正常帮你连上校园网
代码运行成功!
开机自动启动
安装库
pyinstaller 这个库用来将我们写好的代码打包成类似于 .exe 的可执行程序
方法一:可以在 cmd 下使用命令下载安装:
cmd 中输入:pip3 install pyinstaller
然后回车,等待它下载完成即可
方法二:可以在 Pycharm 里安装这些库
看前边
打包
终端输入(cmd终端和Pycharm终端都可以 但是要进入main的路径)
1
| pyinstaller -F -w main.py
|
注意, 上面这行命令中的main.py
是我的 Python 代码文件名,你需要替换为你自己的
这次我们添加了 -w
参数,这表示当我们执行打包好的.exe
程序时不会有黑框框出来(它会在后台运行)
等待打包完成,在 dist 目录下可以看到一个.exe
程序
当你双击执行它的时候,不会有弹窗出现,只是在后台运行
设置开机自动运行
搜索计算机管理
然后按照下图依次点击:
在新出现的窗口中输入名称,描述可以不用写,然后点击下一步
再接着,勾选计算机启动时
,然后点击下一步
勾选启动程序
,然后点击下一步
点击浏览,选择好你刚刚打包好的.exe
程序 ,选择好后点击下一步
把这个选项勾选上,然后点击完成
如下图,在出现的窗口中选择好操作系统
在同样的窗口中点击条件
,按照你自己的需要进行勾选
在同样的页面中点击设置
,自行设置,完成后点击确定
通过以上步骤我们就实现了每次开机的时候自动登录校园网,再也不用每次都要开浏览器自己手动登录了
快断开你的校园网然后重启你的电脑试试看吧
使用bat调用
可以直接在cmd
输入shell:common startup
打开启动文件夹 在此文件夹创建login.bat
文件 里边写入
1 2 3 4
| @echo off D: cd D:\login python login.py
|
我的是把login.py放在了D盘的login文件夹下 你可以效仿。这个bat的作用是切换到指定的位置然后python调用 可以不使用python打包生成exe文件 @echo off
是启动时不显示
代理关闭
因为有时候我会使用代理软件然后我又经常忘记关闭代理开机这个时候开机之后就没办法联网所以要加一个代理检测的函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import winreg
def disable_proxy(): try: key_path = r"Software\Microsoft\Windows\CurrentVersion\Internet Settings" with winreg.OpenKey(winreg.HKEY_CURRENT_USER, key_path, 0, winreg.KEY_SET_VALUE) as key: winreg.SetValueEx(key, "ProxyEnable", 0, winreg.REG_DWORD, 0) print("系统代理已关闭") except Exception as e: print(f"关闭系统代理时发生错误: {e}")
def is_proxy_enabled(): try: key_path = r"Software\Microsoft\Windows\CurrentVersion\Internet Settings" with winreg.OpenKey(winreg.HKEY_CURRENT_USER, key_path, 0, winreg.KEY_READ) as key: value, _ = winreg.QueryValueEx(key, "ProxyEnable") print("代理为关闭") return value == 1 except Exception as e: print(f"获取系统代理状态时发生错误: {e}") return False
if is_proxy_enabled(): disable_proxy()
|
如果你不需要就可以把这一部分去掉
我的完整代码
对于请求中的 post_addr 我建议是你先自己登录一次,抓取你自己的请求连接 不然使用我的的话可能会出现ip地址冲突的问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| import requests import winreg
def disable_proxy(): try: key_path = r"Software\Microsoft\Windows\CurrentVersion\Internet Settings" with winreg.OpenKey(winreg.HKEY_CURRENT_USER, key_path, 0, winreg.KEY_SET_VALUE) as key: winreg.SetValueEx(key, "ProxyEnable", 0, winreg.REG_DWORD, 0) print("系统代理已关闭") except Exception as e: print(f"关闭系统代理时发生错误: {e}")
def is_proxy_enabled(): try: key_path = r"Software\Microsoft\Windows\CurrentVersion\Internet Settings" with winreg.OpenKey(winreg.HKEY_CURRENT_USER, key_path, 0, winreg.KEY_READ) as key: value, _ = winreg.QueryValueEx(key, "ProxyEnable") print("代理为关闭") return value == 1 except Exception as e: print(f"获取系统代理状态时发生错误: {e}") return False
def login(): username = '@yidong' pwd = '' om = '123456' post_addr = "http://172.168.254.6:801/eportal/?c=ACSetting&a=Login&protocol=http:&hostname=172.168.254.6&iTermType=1&mac=000000000000&ip=172.19.209.78&enAdvert=0&loginMethod=1"
post_data = { 'DDDDD': username, 'upass': pwd, '0MKKey': om } requests.post(post_addr, data=post_data) print("login success!")
if is_proxy_enabled(): disable_proxy()
login()
|