Python程序实现校园网自动登录认证
起因
前段时间出差,工位电脑的远程连接老是断开,原因是校园网需要定期登录认证。认证到期后电脑就断开互联网了,也没办法通过远程实现登录认证。回学校的第一件事就是写了个程序,自动检查网络状态和自动进行校园网登录认证。
思路
- 用ping 8.8.8.8检查当前的联网状态,若已联网则不操作
- 若未联网,则用webdriver获取网页,输入用户名和密码完成登录
- 再用ping 8.8.8.8来检查当前的联网状态
- 设置一个时间间隔,定期重复进行上述操作
Python源代码
主要是写了个CompusNetwork类,(1)通过校园网登录网址、用户名和密码初始化;(2)静态方法ping_test(),检查电脑当前是否接入互联网;(3)login()函数,实现自动登录校园网。
from selenium import webdriver
from selenium.webdriver.common.by import By
from datetime import datetime
import time
import os
import subprocess
from getpass import getpass
class CompusNetwork:
def __init__(self,username,password,login_url):
self.username = username
self.password = password
self.login_url = login_url
def login(self):
'''
自动登录校园网
:param username:
:param password:
:return:
'''
# 初始化webdriver
driver = webdriver.Chrome()
try:
# 打开网页
print("正在登录校园网")
driver.get(self.login_url)
# 等待页面加载完成
driver.implicitly_wait(5)
# 根据id定位文本框
textbox_username = driver.find_element(By.ID, 'username')
textbox_username.clear()
textbox_username.send_keys(self.username)
textbox_password = driver.find_element(By.ID, 'password')
textbox_password.clear()
textbox_password.send_keys(self.password)
textbox_login = driver.find_element(By.ID, 'login')
# 点击登录
textbox_login.click()
time.sleep(5)
if CompusNetwork.ping_test():
status = "登录成功"
else:
status = "登录失败"
except:
status = "未知错误"
finally:
# 关闭浏览器
driver.quit()
return status
@staticmethod
def ping_test(host="8.8.8.8"):
'''
检查是否接入互联网
:param host:
:return:
'''
# 在Windows系统上,ping命令需要加上'-n 1'参数来限制只发送一个echo请求
# 在Unix/Linux系统上,应使用'-c 1'参数
param = '-n 1' if os.name == 'nt' else '-c 1'
command = f"ping {param} {host}"
# 使用subprocess.run执行命令,capture_output=True可以捕获输出,text=True使输出为字符串形式
response = subprocess.run(command, capture_output=True, text=True, check=False)
# 根据返回码判断是否成功,0表示成功
return response.returncode == 0
if __name__ == "__main__":
print("输入校园网账号和密码,用于自动登录校园网")
# 不给学校丢脸,登录地址改为了4399的
login_url = "https://www.4399.com/"
# 输入校园网账户名
username = input("请输入学号(字母小写):")
# 输入密码
password = getpass("请输入密码(隐藏显示): ")
user = CompusNetwork(username, password, login_url)
print("设置重复检查网络状态和登录校园网的时间间隔")
span = input("请输入时间(小时): ")
while True:
# 打印当前时间
current_time = datetime.now()
print("\n\n当前时间是:", current_time)
# 是否接入互联网
net_stat = CompusNetwork.ping_test()
print(f"已接入互联网? {net_stat}")
# 未联网执行登录操作
if not net_stat:
status = user.login()
print(status)
# 一个小时后再操作
time.sleep(3600*float(span))