前言
最近刷b站,看到一位up主利用python制作了一个校园网自动连接的程序,看完很是心动。想着自己也学过python,准备尝试一下。前前后后摸索了两天,这里分享一下实现过程。
获取程序可直接跳转exe与txt获取方式
一、前期准备
导入需要的库
import requests #请求链接
import base64 #密码加密
import os #检查文件路径
import tkinter as tk
import tkinter.messagebox as msg #设置弹窗界面
requests库安装步骤
不知道为啥我的python好像自带了需要的库(也可能是我以前用过)。如果运行时有缺少的库,可以按照下述步骤安装。这里以requests库为例。
- 第一步:
win
+R
键打开运行窗口 - 第二步:输入
cmd
(如下图所示)
- 第三步:输入
pip install requests
当显示Successfully installed requests-2.27.1
则说明安装完成。
二、检查网络连接
在发送登录请求之前,我们要确保电脑已经连上校园网,并且能够正常访问登陆界面,python代码如下:
#检查网络连接
def check():
url = 'http://211.69.143.97/include/auth_action.php'
try:
code = requests.get(url,timeout=5).status_code
if code == 200:
return 1
else:
return 0
except:
return 0
当函数返回值为1时说明连接正常,否则网络连接错误。(可能没有连接到校园网)
三、建立登陆账户
为了实现每次连接校园网时都不用重复输入账号密码,我用python写了一个建立登陆账户的函数,代码如下:
#建立登陆账户
def account():
#生成账户文件夹
if os.path.exists("D:/hzauwireless")==0:
os.makedirs("D:/hzauwireless")
#获取账号密码
if os.path.isfile("D:/hzauwireless/account.txt")==0: #初始化账户
username = input("username:")
password = input("password:")
username = str(username)
password = base64.b64encode(password.encode('utf-8')) #base64转码
password = "{B}"+str(password)[2:-1]
line = [username,password]
f = open("D:/hzauwireless/account.txt","w")
f.write(username+'n'+password)
else:
f = open("D:/hzauwireless/account.txt","r") #读取账户数据
line = f.readlines()
return line
这里需要注意的是,在向网页发送请求时,密码经过了base64编码,因此这里要借助base64库将密码进行转码。
建立账户会在D盘生成一个名为hzauwireless
的文件夹,账号密码信息均储存在文件夹的account.txt
中。
如果你的电脑没有D盘或者不想将账户文件存在D盘,可以自行修改代码中的路径。
四、发送请求
这是代码的核心部分,能否成功连接校园网全靠这一部分的代码。python代码如下:
#发送请求
def login(username,password):
post_address = 'http://211.69.143.97/include/auth_action.php'
post_headers = {
'Connection': 'keep-alive',
'Accept': '*/*',
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
}
post_data = {
'action': 'login',
'username': username,
'password': password,
'ac_id': '5',
'save_me': '1',
'ajax': '1',
}
#发送登录请求
z = requests.post(url=post_address, data=post_data, headers=post_headers)
#判断请求结果
if "login_ok" in z.text:
show("登陆成功!")
return 1
elif "User not found" in z.text:
show("用户名错误")
return 0
elif "Password is error" in z.text:
show("密码错误")
return 0
elif "E2616" in z.text:
show("已欠费")
return 1 #欠费后不再重复发送请求
else:
#show("未知错误,报错如下:"+"n"+z.text)
return 0
以上就是实现校园网自动需要的三个基本部分,但为了优化界面,我还写了一个show()
函数,替换了所有的print()
函数。
五、弹窗界面
这里选择使用tkinter库制作消息弹窗,python代码如下:
#定义弹窗函数
def show(str):
tk.Tk().withdraw() #删除多余的tk窗口
msg.showinfo(message=str)
六、编写主程序
这一部分就比较简单,首先判断网络连接,然后发送请求。
为了防止一次请求可能发生意外,我设置的发送两次请求。
对于账号密码输入错误的情况,我设置了三次错误上限,连续输入错误则自动退出程序。
python代码如下:
#主程序
if check() == 1:
i = 0 #控制循环次数
while login(account()[0],account()[1]) == 0:
i = i+1
if i>3:
show("错误次数过多") #连续三次错误退出循环
break
elif i == 1: #防止单次请求可能发生错误
continue
else:
show("请重新输入")
os.unlink("D:/hzauwireless/account.txt")
else:
show("网络连接错误,请检查网络连接")
完整python代码
import requests
import base64
import os
import tkinter as tk
import tkinter.messagebox as msg
#定义弹窗函数
def show(str):
tk.Tk().withdraw()
msg.showinfo(message=str)
#检查网络连接
def check():
url = 'http://211.69.143.97/include/auth_action.php'
try:
code = requests.get(url,timeout=5).status_code
if code == 200:
return 1
else:
return 0
except:
return 0
#建立登陆账户
def account():
#生成账户文件夹
if os.path.exists("D:/hzauwireless")==0:
os.makedirs("D:/hzauwireless")
#获取账号密码
if os.path.isfile("D:/hzauwireless/account.txt")==0: #初始化账户
username = input("username:")
password = input("password:")
username = str(username)
password = base64.b64encode(password.encode('utf-8')) #base64编码
password = "{B}"+str(password)[2:-1]
line = [username,password]
f = open("D:/hzauwireless/account.txt","w")
f.write(username+'n'+password)
else:
f = open("D:/hzauwireless/account.txt","r") #读取账户数据
line = f.readlines()
return line
#发送请求
def login(username,password):
post_address = 'http://211.69.143.97/include/auth_action.php'
post_headers = {
'Connection': 'keep-alive',
'Accept': '*/*',
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
}
post_data = {
'action': 'login',
'username': username,
'password': password,
'ac_id': '5',
'save_me': '1',
'ajax': '1',
}
z = requests.post(url=post_address, data=post_data, headers=post_headers)
if "login_ok" in z.text:
show("登陆成功!")
return 1
elif "User not found" in z.text:
show("用户名错误")
return 0
elif "Password is error" in z.text:
show("密码错误")
return 0
elif "E2616" in z.text:
show("已欠费")
return 1 #欠费后不再重复发送请求
else:
#show("未知错误,报错如下:"+"n"+z.text)
return 0
#主程序
if check() == 1:
i = 0 #控制循环次数
while login(account()[0],account()[1]) == 0:
i = i+1
if i>3:
show("错误次数过多") #连续三次错误退出循环
break
elif i == 1: #防止单次请求可能发生错误
continue
else:
show("请重新输入")
os.unlink("D:/hzauwireless/account.txt")
else:
show("网络连接错误,请检查网络连接")
将.py文件转为.exe
为了后面便于联网启动,我们需要先将.py文件封装为.exe文件,步骤如下:
- 第一步:打开cmd
- 第二步:输入
pip install pyinstaller
,安装pyinstaller - 第三步:转到.py文件所在路径
- 第四步:输入
pyinstaller -F main.py
运行完成后可以在main.py目录下找到一个dist文件夹,双击打开后会出现一个main.exe
连接校园网后自动运行
为了使每次连接HZAU-wireless时都能正常运行exe程序,我们需要添加一些任务计划
,步骤如下:
- 第一步:
win
+R
打开运行,输入compmgmt.msc
打开计算机管理 - 第二步:
任务计划程序
->任务计划程序库
->导入任务
- 第三步:将
wifi自连.txt
文件导入(这里注意选择文件时,将文件类型改为所有文件
)
- 第四步:
创建任务
->设置
,
勾选如果过了计划开始时间,立即启动任务
这里解决了开机启动时自动连接连接校园网,而任务计划无法监测到的问题。
exe与txt获取方式
点击下载 密码: 5gbd
tip:main.exe
路径默认为D:hzauwireless
,如有需要,可以在wifi自连.txt
进行修改。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用python脚本自动登录华农校园网(附程序) - Python技术站