Python程序实现校园网自动登录认证

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))
  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值