校园网自动登录脚本

问题背景

校园网连上后需要手动登录认证后才能正常使用

校园网登陆界面

解决方案

模拟请求URL(不好用)

URL
可以看到登录时请求的URL并不简单

这种可以成功,但并不总能成功,主要问题可能是这个请求的URL每次都是变化的,导致会失效,于是更推荐下面的更稳定的方案

通过selenium库模拟登录过程
主要步骤
  • 需要下载一个驱动来打开浏览器
    我用的是谷歌浏览器驱动,也可以用其他浏览器的驱动前提是你要有对应的浏览器,驱动版本需要对应你的浏览器的版本号
    谷歌浏览器驱动下载地址
    查看谷歌浏览器版本号(也可以在设置里面查看)
    在这里插入图片描述
  • 模拟登录过程
    通过selenium库对登录界面的一些元素进行定位,这里面主要就是定位账号密码输入框并进行输入。具体元素的id或者名称可以通过查看登录界面的前端代码得知。
代码
# 湖北工业大学校园网自动登录脚本
from selenium.webdriver.common.by import By  # 解决browser.find_element_By_
from time import sleep
# 打开浏览器
from selenium.webdriver.chrome.options import Options  # 解决不打开浏览器问题
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService


# 校园网ip
login_ip = "http://202.114.177.246"  # 湖工大校园网ip
# 配置
username = "2010301019"  # 账号
password = "XXXXXX"  # 密码
yys = "@cucc"  # 运营商(通过下方对应关系来确定符号)
# 联通-> "@cucc"
# 移动-> "@cmcc"
# 电信-> "@ctcc"
# 校园网->""

def login():
    # 配置浏览器
    options = Options()
    options.add_argument('headless')  # 隐藏浏览器
    # 获取驱动
    service = ChromeService(executable_path=r"D:\Desktop\code\Python\xywLogin\chromedriver.exe") # 具体地址为下载的浏览器驱动所在位置
    driver = webdriver.Chrome(service=service, options=options)
    # 启动浏览器
    driver.get(login_ip)

    # 设置定位等待时间(因网速原因需要等待网页加载好)
    driver.implicitly_wait(3)

    # 判断是否已经登录,已经登录则直接退出
    try:
        driver.find_element(By.ID, "logout")
        print("already login")
        driver.quit()
        return
    # 通过捕获"找不到登出元素异常"来判断未登录
    except Exception as e:
        print("no login")

    # 设置定位等待时间
    driver.implicitly_wait(1)

    # 定位输入账号处并输入账号
    driver.find_element(By.ID, "username").send_keys(username + yys)

    # 定位密码并输入密码
    driver.find_element(By.ID, "password").send_keys(password)

    # 定位登录并点击登录
    driver.find_element(By.ID, "login-account").click()

    # 设置定位等待时间
    sleep(1)

    # 关闭浏览器
    driver.quit()


if __name__ == '__main__':
    login()

这样就能实现运行一次脚本在后台自动登录一次校园网了
再结合计算机自带的任务启动程序,就可以实现每次解锁锁屏的时候自动登录校园网

配置每次打开屏幕时自动登录

  • 打开任务计划程序(电脑自带)

在这里插入图片描述

  • 创建任务在这里插入图片描述
  • 常规
    在这里插入图片描述
  • 触发器内新建触发器
    在这里插入图片描述
  • 操作里新键操作(此步填入脚本的位置)
    在这里插入图片描述
  • 条件里也可以简单设置一下在这里插入图片描述
运行起来可能会有驱动的黑框,解决方法可以参考这篇文章

http://t.csdn.cn/bijwg

至此可以实现每次解锁电脑时自动登录校园网,未登录状态时锁屏再解锁电脑即可


由于近期校园网总是gank学生(指总是掉线),本来打算实现每次断网都能触发这个脚本实现自动登录,但是没能成功找到一个合适的触发条件,暂时想到的唯一的方法是,间隔几秒检测一下网络状态,这样可以实现,但是需要消耗一定的运行内存来持续检测,也不太推荐用。

代码

# 需要结合上面的代码
# 判断网络状态
from subprocess import run, PIPE

def judge_net_state():
    cnt = 1
    while True:
        # ping一次百度来判断网络状态
        r = run('ping www.baidu.com',
                stdout=PIPE,
                stderr=PIPE,
                stdin=PIPE,
                shell=True)
        # 当网络异常时重新登录网络
        if r.returncode:
            login()  # 这里写login函数
            print('relogin 第{}次'.format(cnt))
            print(time.localtime())
            cnt += 1
        # print('正常联网')
        sleep(10)  # 每10s检查一次网络状态

先写这么多,如果有需要可以再讨论,如果不想看代码想直接白嫖现成脚本软件的也可以与我联系。

### OpenWRT 校园网自动登录脚本实现 对于OpenWRT系统而言,创建一个能够自动检测网络状态并尝试重新登录校园网的Shell脚本是一项实用的功能。下面提供了一个具体的实现方案。 #### 创建与编辑登录脚本 `login.sh` 首先,在设备上通过SSH访问终端,并利用vi或其他文本编辑器来建立一个新的bash shell文件`login.sh`: ```bash #!/bin/bash # 判断是否可以ping通外部网站以确认联网状况 ping -c5 www.baidu.com >/dev/null 2>&1 if [ $? -ne 0 ];then # 获取当前分配给路由器接口eth0的IP地址作为user_ip变量值 user_ip=$(ifconfig eth0 | grep "inet addr" | cut -d: -f2 | awk '{print $1}') # 执行curl请求模拟浏览器提交表单完成认证过程;注意替换实际使用的URL路径以及账户信息 curl 'http://example.com/drcom/login?callback=dr1004&DDDDD=学号%40cmcc&upass=密码&0MKKey=Login&R1=0&R3=0&R6=0&para=00&v6ip=&v=9102' \ --interface "$user_ip" fi ``` 此段代码实现了当无法正常访问互联网时触发一次新的认证流程[^1]。这里特别强调了动态获取路由器所获得的内部IP地址用于构建完整的HTTP POST请求参数列表[^2]。 为了使上述脚本能顺利运行,还需要确保几个前提条件得到满足: - 已经安装好必要的软件包如`wget`, `curl`等工具; - 正确设置了防火墙规则允许向外发起HTTPS/HTTP请求; - 将该脚本设置为可执行权限并通过crontab定时任务定期调用来保持在线状态。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值