使用python实现校园网的自动登录
发表于:2022-08-26 | 分类: Python Humansimular

使用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平台
  • 您的认可将会是我进步的动力!
上一篇:
BingWallpaper--我写了一个自动获取Bing壁纸的插件
下一篇:
使用python下载流媒体