校园网自动登录python脚本(南京邮电大学)
概述
苦于校园网每天都需要重新登录,写了一个脚本可以自动登录校园网,在断网时间段则使用手机热点上网,最后生成exe程序可以放到开机自启文件夹里实现开机自动登录校园网
本教程涉及装配Python环境和工具
安装vscode 和python
以Windows系统为例,在执行脚本前需要先安装vscode(或PyCharm等)和python,并设好环境变量以供调试使用
vscode安装
从官网下载安装后先设置语言

点击install后重新打开应用程序
随后安装python扩展包,过程和安装中文包类似
搜索python,install即可
安装完成后显示下图框选的四个

python安装
请参考Python安装教程(新手)_python tcl/tk support-CSDN博客
安装pyinstaller
pyinstaller这个工具可以将python转为exe文件
先打开命令提示符
-
按下 "Win + R" 键,打开 "运行" 对话框
-
在 "运行" 对话框中,输入 "cmd"(不带引号),回车
-
可以使用pip进行安装:
pip install pyinstaller
安装selenium
在命令提示符中输入
pip install selenium
添加webdriver
参考以下两篇文章:
基于Python的Selenium详细教程_selenium python-CSDN博客 浏览器安装selenium驱动,以Microsoft Edge安装驱动为例_edge浏览器驱动-CSDN博客
- Chrome: ChromeDriver
- Firefox: GeckoDriver
- Microsoft Edge: EdgeDriver
- Safari: SafariDriver 已内置在Safari浏览器中(仅限macOS)
下载后放在安装python的文件夹下
代码部分
#南京邮电大学移动电信校园网自动登录脚本
#created by yh 2024.3.23
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
import datetime
import subprocess
import urllib.request
#检查网络能否链接到Internet
def check_internet():
try:
urllib.request.urlopen("http://www.baidu.com", timeout=4)
return True
except urllib.error.URLError:
return False
# 检查是否能搜索到特定的WiFi网络名称
def check_network_availability(target_network_name):
try:
# 运行"netsh wlan show networks"命令
result = subprocess.check_output(['netsh', 'wlan', 'show', 'networks'], shell=True).decode('utf-8', 'ignore')
# 检查输出中是否存在指定的WiFi网络名称
if target_network_name in result:
print(f"找到WiFi网络:{target_network_name}。")
return True
else:
print(f"未找到WiFi网络:{target_network_name}。")
return False
except subprocess.CalledProcessError as e:
print("搜索WiFi网络时出错:", e.output)
return False
'''
# 示例使用
network_name = input("请输入您要搜索的WiFi网络名称: ")
check_network_availability(network_name)
'''
# 检查当前连接的WiFi网络名称是否为指定的名称
def check_wifi_connected(target_network_name):
try:
# 运行"netsh wlan show interfaces"命令
result = subprocess.check_output(['netsh', 'wlan', 'show', 'interfaces']).decode('mbcs')
# 检查输出中是否存在"已连接"字样
if "已连接" in result:
# 截取当前连接的WiFi名称
for line in result.split('\n'):
if "SSID" in line and ":" in line:
# 提取SSID字段
current_network_name = line.split(":")[1].strip()
# 检查是否与指定的网络名称匹配
if current_network_name == target_network_name:
print(f"当前已连接至指定WiFi网络:{target_network_name}。")
return True
else:
print(f"当前连接的WiFi不是指定网络,连接到的是:{current_network_name}")
return False
else:
print("当前未连接WiFi。")
return 2
except subprocess.CalledProcessError as e:
print("检查WiFi连接时出错:", e.output)
return False
'''
# 示例使用
network_name = input("请输入您要检查的WiFi网络名称: ")
check_wifi_connected(network_name)
'''
# 连接到指定的WiFi网络(需要已有配置文件)
def connect_to_wifi(network_name):
try:
# 运行"netsh wlan connect"命令
result = subprocess.run(['netsh', 'wlan', 'connect', 'name={}'.format(network_name)], check=True)
#print(f"尝试连接到 {network_name}...")
except subprocess.CalledProcessError as e:
print(f"连接到WiFi失败:{e}")
#登录校园网
def login_to_website(username, password):
# 启动Edge浏览器
browser = webdriver.Edge()
time.sleep(1)
try:
# 访问页面
browser.get("https://p.njupt.edu.cn/")
# 定位用户名输入框并输入用户名
input_text = browser.find_element(By.XPATH, '//*[@id="edit_body"]/div[2]/div[7]/form/input[3]')
input_text.send_keys(username)
# 定位密码输入框并输入密码
input_text = browser.find_element(By.XPATH, '//*[@id="edit_body"]/div[2]/div[7]/form/input[4]')
input_text.send_keys(password)
# 定位登录按钮并点击
button = browser.find_element(By.XPATH, '//*[@id="edit_body"]/div[2]/div[7]/form/input[2]')
browser.execute_script("arguments[0].click();", button)
except:
print("可能已经登录或登录错误")
finally:
# 退出浏览器
browser.quit()
#检测当前时间在周末
def is_time_in_weekend_range():
# 获取当前时间
current_time = datetime.datetime.now()
# 获取当前时间的小时和星期几
current_hour = current_time.hour
current_weekday = current_time.weekday() # 星期五是4,星期六是5,星期日是6
# 如果现在是周五晚上23点后
if current_weekday == 4 and current_hour >= 23:
return True
# 如果现在是周六全天
elif current_weekday == 5:
return True
# 如果现在是周日但还没到晚上23点
elif current_weekday == 6 and current_hour < 23:
return True
else:
return False
######################################################################################
####-----------------------------在此修改你的个人信息-------------------------------####
######################################################################################
target_network_name ='NJUPT-CMCC' #请注释其中一行
target_network_name ='NJUPT-CHINANET' #请注释其中一行
account="BPQ232323"
password="123456" #智慧校园账号密码
network_name="123456" #此为断网期间的备用网络
######################################################################################
####------------------------------------------------------------------------------####
######################################################################################
# 获取当前时间
current_time = datetime.datetime.now()
# 设定时间范围:晚上11点到早上7点
start_time = current_time.replace(hour=23, minute=40, second=0, microsecond=0)
end_time = current_time.replace(hour=7, minute=0, second=0, microsecond=0)
# 如果当前时间在范围内,则
if end_time <= current_time <= start_time and is_time_in_weekend_range():
print("当前时间在7-23点之间或周末,登录校园网")
if check_wifi_connected(target_network_name)==2:
# 如果没有连接到指定网络,执行这部分代码
print(f"没有连接网络,尝试连接:{target_network_name}")
# ... 这里加入没有连接到网络时要执行的代码 ...
connect_to_wifi(target_network_name)
# 调用函数执行登录动作
login_to_website(account, password)
else:
# if check_internet():
# print("Internet连接正常。")
# else:
# print("无法连接到Internet。")
login_to_website(account, password)
else:
print("当前时间在凌晨,断开校园网")
if check_network_availability(network_name):
# 连接到特定的WiFi(确保你之前已经通过GUI或netsh命令保存过该网络的配置文件)
connect_to_wifi(network_name)
else:
print(f"没有连接到指定网络:{network_name}")
result = subprocess.check_output(['netsh', 'wlan', 'show', 'interfaces']).decode('mbcs')
# 检查输出中是否存在"已连接"字样
if "已连接" in result:
print(f"当前已连接WiFi网络。")
else:
print("当前未连接WiFi。")
注意:
- 在代码142-152行修改个人信息
- 如果不是edge,在96行相应替换
将Python文件 转换为exe文件
pyinstaller --onefile your_script.py
这里的your_script.py是要转换的Python文件名称
在生成的dist目录里找到你的 .exe 文件,这个文件就是可执行的Windows程序,可以在没有Python环境的电脑上运行。
设置开机自启(以Windows为例)
打开C:\Users\(主机名)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
或者在资源管理器的地址栏输入以下路径快速访问:
shell:startup
将程序的快捷方式复制该文件夹中,重启电脑
写在最后
第一版写于2024.3.23,可能有不够详尽之处,且笔者能力有限,欢迎批评指正
更多推荐


所有评论(0)