南邮这个校园网,每当电脑空闲一段时间后就会自动注销,之后打开电脑就要重新登陆账号,虽然浏览器可以记住账号密码,也就是多几步的操作而已,但是出于兴趣,在网上学习了一下如何编写自动化脚本自动检测网络状态,达到断网自连的效果,参考了几位南邮同学的文章,下面是我综合几位同学代码,取长补短修改后的版本。
1 安装库文件
首先,需要安装pyinstaller
,这个库文件可以将python
代码打包成exe
文件。
pip install pyinstaller
其次,需要安装selenium
,这个库文件是连接浏览器的自动化脚本,安装对应浏览器的驱动器后,可以实现自动打开浏览器,然后完成账号登陆的功能。
我使用的是Edge浏览器,所以我直接将Edge浏览器升级到最新版本,然后安装最新版本的Edge WebDriver即可。
附上链接:Edge WebDriver 下载
然后,将下载好的驱动器文件移动到python.exe对应的文件下,即与python.exe处在同一个文件夹下。这里我使用的是虚拟环境,因此我将文件移动到虚拟环境的python.exe所在的文件夹下,如图所示。
2 编写自动化脚本文件
详细代码如下:
# 南京邮电大学移动电信校园网自动登录脚本
# created by nelson 2024.9.10
import socket
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
import subprocess
# 检查网络能否链接到Internet
def isNetOK(testserver):
s = socket.socket()
s.settimeout(1)
try:
status = s.connect_ex(testserver)
if status == 0:
s.close()
return True
else:
return False
except Exception as e:
return False
def isConnected():
q = ('www.baidu.com', 443)
return isNetOK(q)
# 检查当前连接的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
# 连接到指定的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()
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)
# 定位运营商选择框并选择电信运营商
#select_element = browser.find_element(By.XPATH, '//*[@id="edit_body"]/div[2]/div[7]/select')
# select = Select(select_element)
# select.select_by_visible_text('中国电信')
# 定位登录按钮并点击
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()
######################################################################################
####-----------------------------在此修改你的个人信息-------------------------------####
######################################################################################
target_network_name = 'NJUPT-CHINANET' # 请注释其中一行
account = "学号"
password = "密码" # 智慧校园账号密码
######################################################################################
####------------------------------------------------------------------------------####
######################################################################################
def connect():
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:
login_to_website(account, password)
result = subprocess.check_output(['netsh', 'wlan', 'show', 'interfaces']).decode('mbcs')
# 检查输出中是否存在"已连接"字样
if "已连接" in result:
print(f"当前已连接WiFi网络")
else:
print("当前未连接WiFi")
if __name__ == '__main__':
if not isConnected():
connect()
else:
print('当前可以上网')
接着进行打包操作,在命令行输入一下内容进行打包
pyinstaller --onefile AutoConnectNJUPT-CHINANET.py
生成exe
文件在dist
文件夹中。
将此文件移动到自己想要存放的位置。
3 创建任务计划程序
通过Win键+X
选择计算机管理
选项。
这里我将触发器设置成电脑解锁时运行脚本。
最后点击确定。
测试
电脑解锁后,会自动运行此脚本,如果断网了会自动连接,如果没断网,则直接退出。