使用python实现校园网的自动登录
南信大的校园网登录一直是令人头疼的问题,每次开机都要等待浏览器弹出登录页面,输入用户名和密码,点击连接。此过程多多少少都会占用我们的时间,尤其是等我们急着拿电脑传文件的情况下,特别难受。于是我就想到了能否拿python实现校园网的自动连接呢,of course yes!
github项目地址:
github发布地址:
模块介绍:
- 本程序用到了下列模块:
- selenium(模拟对浏览器的操作)、time(设置超时,防止网页没有加载完全)、os(系统模块,验证网络是否已连接)、win32api(弹窗与用户进行交互)
- 此外,本程序还使用了Google的开源项目Chronium
使用方法
- 点击上面的发布地址进入我的GitHub发布页,点击下载文件包
- 解压文件
- 把chronium文件夹拖入到F盘的根目录底下
- 进入另一个文件夹,把主程序的快捷方式发送到桌面
- 按下win + R 输入shell:startup
- 把桌面上的快捷方式拖到弹出的启动文件夹内
- 重启电脑
程序源码:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
import os
import win32con,win32api
def connect():
url = "http://10.255.255.34/authentication"
# 调用指定位置的chrome
options = webdriver.ChromeOptions()
options.headless = True
# chrome的主程序位置
location = r"F:\chronium\chrome-win\chrome.exe"
# 在options增加读取的位置
options.binary_location = location
# 指定chromedriver的路径
service = Service(r"F:\chronium\chromedriver.exe")
# 开启浏览器
new = webdriver.Chrome(service=service, options=options)
try:
new.get(url=url)
new.find_elements(by=By.XPATH,
value="//span/input[@class='ant-input' and @id='login-pc_username'and @placeholder='用户名']")[
1].send_keys("#")
new.find_elements(by=By.XPATH, value="//input[@id='login-pc_password']")[1].send_keys("#")
new.find_elements(by=By.XPATH, value="//input[@id='login-pc_autoAuth']")[1].click()
new.find_elements(by=By.XPATH, value="//button")[1].click()
time.sleep(2)
button = new.find_elements(by=By.XPATH,value="//div[@tabindex='-1']/div[@class='ant-drawer-content-wrapper'][1]//div[@class='ant-drawer-content']//button")
time.sleep(1)
button[2].click()
time.sleep(1)
except:
win32api.MessageBox(0, "校园网wifi状态不正确!", "来自Nuist的提示", win32con.MB_OK)
#以下为debug内容
#time.sleep(1)
#print(type(test))
#print(test[2].text)
#print(len(test))
#for item in test:
#print(item.get_attribute("outerHTML"))
#time.sleep(2)
'''
new.find_elements(by=By.XPATH,value="//span/input[@class='ant-input' and @id='login-pc_username'and @placeholder='用户名']")[1].send_keys("02502607554")
new.find_elements(by=By.XPATH,value="//input[@id='login-pc_password']")[1].send_keys("829327")
new.find_elements(by=By.XPATH,value="//input[@id='login-pc_autoAuth']")[1].click()
new.find_elements(by=By.XPATH,value="//button")[1].click()
new.find_elements(by=By.XPATH,value="//div[@class='ant-drawer-body']/button[@class='col ant-btn ant-btn-lg ant-btn-block']")[2].click()
'''
new.quit()
pass
def judge():
res = os.popen("ping -n 1 -l 8 baidu.com").read()
print(res)
if("请求超时" in res):
return 0
elif("的回复: 字节=8" in res):
return 1
else:
return -1
pass
def start():
main()
def main():
i=1
print("程序开始,准备连接网络")
connect()
if (judge()==1):
print("程序执行完毕")
win32api.MessageBox(0, "网络连接成功", "来自Nuist的提示", win32con.MB_OK)
elif(judge()==0):
print("Oops,程序第1次连接失败了,将会继续尝试")
while(True):
connect()
i+=1
print("第%d次连接失败,准备下一次尝试" % i)
if(i==5):
break
win32api.MessageBox(0, "网络连接多次失败,请检查", "来自Nuist的提示", win32con.MB_OK)
else:
win32api.MessageBox(0, "网络连接失败!", "来自Nuist的提示", win32con.MB_OK)
pass
print("程序执行完毕")
if __name__=="__start__":
start()
特别说明
- 本程序为演示版本,后续会发布更新,请耐心等待,具体看作者心情
- 目前仅支持Windows平台
- 您的认可将会是我进步的动力!