油猴脚本:自动登陆校园宽带
前言:360浏览器在 已登录账号且 无网络情况下,无法提供保存在本地的账号与密码,为了方便懒人,提供两种自动登陆校园宽带( 桂工GLUT)联网方式:
- 油猴插件。
- python发送请求登陆校园。
方法一:油猴插件
将下方【】
符号内容更换为自己的账号/密码即可(并删去’【】'符号)。
// ==UserScript==
// @name glut校园网联网
// @namespace lue
// @version only-me-1
// @description connect to network.(填充账号密码,选择宽带类型,点击登录)
// @author 略
// @match http://172.16.2.2/*
// @icon https://so.360tres.com/dmfd/100_100_80/t01b94b05f6f075c42c.webp?size=200x200
// @grant none
// ==/UserScript==
(function() {
'use strict';
function fillForm() {
// 获取账号输入框元素
var inputElement = document.querySelector('input[name="DDDDD"][type="text"]');
if (inputElement) {
inputElement.value = "【你的账号】";
// 输入密码
document.querySelector('input[name="upass"][type="password"]').value = "【你的密码】";
// 触发输入事件
inputElement.dispatchEvent(new Event('input', { bubbles: true }));
// 选择宽带类型
var radioElement = document.querySelector('input[name="network"][value="2"]').checked = true;
// 模拟点击登录按钮
var loginButton = document.querySelector('input[type="submit"][name="0MKKey"]').click();
} else {
console.log('无输入框,可能已登录');
}
}
// 等待页面完全加载
window.addEventListener('load', function() {
// 使用 setTimeout 延迟执行,确保页面完全加载
setTimeout(fillForm, 1000);
});
})();
方法二:python+cmd
完整共4个文件:data.json,post.py,main.py,联网.cmd
将联网.cmd
发送快捷方式到桌面,需要认证校园宽带时,点击运行联网.cmd
的快捷方式即可。
完整版
- data.json
修改下方【】
符号内容为自己的账号密码(并删去’【】'符号)。
{
"data":{
"callback": "dr1003",
"DDDDD": "【你的账号】",
"upass": "【你的密码】",
"0MKKey": "123456",
"R1": "0",
"R2": "",
"R3": "2",
"R6": "0",
"para": "00",
"v6ip": "",
"terminal_type": "1",
"lang": "zh-cn",
"jsVersion": "4.1",
"v": "5516"
},
"header": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
"Connection": "keep-alive",
"Host": "172.16.2.2",
"Referer": "http://172.16.2.2/",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome"
}
}
- post.py
添加了日志,添加了意外情况的处理。
import requests
from bs4 import BeautifulSoup
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
handler = logging.FileHandler('post.log', encoding='utf-8')
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logging.getLogger().addHandler(handler)
def safe_post(url, header, data):
try:
# 使用Session来复用连接,提高性能
with requests.Session() as session:
status = session.get('http://172.16.2.2')
if status.status_code == 200:
title = BeautifulSoup(status.text, 'html.parser').find('title').text
if title == '注销页':
logging.info("已连接校园网")
else:
res = session.post(url, headers=header, data=data)
# 扩展状态码处理,不仅仅处理200
if res.status_code in [200, 201, 204]:
title = BeautifulSoup(res.text, 'html.parser').find('title').text
if title == '认证成功页':
logging.info("认证成功")
else:
logging.error(f"请求失败,状态码:{res.status_code},响应文本:{res.text}")
except requests.ConnectionError as conn_err:
logging.error(f"连接错误:未连接校园网")
except requests.Timeout as timeout_err:
logging.error(f"请求超时:{timeout_err}")
except Exception as e:
logging.error(f"未知错误:{e}")
- main.py
from post import safe_post
import json
url = ('http://172.16.2.2/drcom/login?')
with open('data.json', 'r') as f:
contents = json.load(f)
header = contents['header']
data = contents['data']
safe_post(url, header, data)
- 联网.cmd
记得修改为自己的python路径。
.venv\Scripts\python.exe main.py
pause
缩减版
可以删除检查登陆成功&联网日志,仅保留主要功能。
把post.py和main.py合并为一个,另外两个文件data.json和联网.cmd保持不变:
- main.py
import requests
import json
url = ('http://172.16.2.2/drcom/login?')
with open('data.json', 'r') as f:
contents = json.load(f)
header = contents['header']
data = contents['data']
try:
requests.post(url, headers=header, data=data)
except:
pass
运行联网.cmd即可联网。