HDU Net Auto Login
HDU Net Auto Login
HDU 的网络每天都需要手动在网页上输入学号和密码登录,不仅非常麻烦
而且经过测试,网络一般在每天凌晨一点多的时候断开,而我至少也要等到早上才会到实验室重新登录
如果有需要长时间保持联网的服务,将导致很长一段时间的网络不可用
因此考虑写一个自动化脚本,每天自动登录
登录方式
首先,HDU 的网络是通过在 http://192.168.112.30
输入学号和密码登录,对此过程观察网络请求

可以发现,登录时的请求中包含了用户名 username
和密码 passowrd
但同时也包括了校验码 chksum
和加密验证信息 info
以及观察登录页面的元素

可以发现,学号、密码和登录按钮分别为 #username
,#passowrd
和 #login-account
因此,只需自动填入 #username
和 #passowrd
,然后点击 #login-account
即可
Tampermonkey
我首先想到的就是利用 Tampermonkey 脚本,正好符合对网页进行操作的需求,而且非常简单
// ==UserScript==
// @name HDU-Net-Login
// @namespace http://tampermonkey.net/
// @version 1.0
// @description Automatically login to network auth
// @author You
// @match http://192.168.112.30/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Replace with your username and password
var username = '<USERNAME>';
var password = '<PASSWORD>';
// Replace 'username_field_id', 'password_field_id', and 'login_button_id' with the actual IDs
document.getElementById('username').value = username;
document.getElementById('password').value = password;
// Automatically click the login button
document.getElementById('login-account').click();
})();
这样,访问 http://192.168.112.30
的时候 Tampermonkey 就会自动往文本框中填入学号和密码,并自动点击登录
然而,这虽然很大程度上简化了登录,但仍旧需要手动访问登录页面
我也尝试过使用 Automator.app
定时自动打开网页,但是似乎在 Mac 进入屏幕保护程序之后是无法打开图形化程序的,只好放弃
Puppeteer
Puppeteer 是一个 Node.js 库,可以控制无头浏览器,可以使用它模拟用户在浏览器中的操作,从而自动执行登录流程
安装 Node.js
安装 Puppeteer
npm install puppeteer
编写 Puppeteer 脚本
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); // Go to login auth page await page.goto('http://192.168.112.30/srun_portal_pc?ac_id=0&theme=pro'); // Fill username and password await page.type('#username', '<USERNAME>'); await page.type('#password', '<PASSWORD>'); // Click login button await Promise.all([ page.click('#login-account'), page.waitForNavigation() // Wait for navigation ]); // Check login status const success = await page.evaluate(() => { return document.body.innerText.includes("Login Successful"); }); if (success) { console.log('Login Successful'); } else { console.log('Login Failed'); } await browser.close(); })();
保存为
HDU-Net-Login.js
自动运行登录脚本
每个小时自动运行登录脚本,并把运行结果写入到
HDU-Net-Login.log
中crontab -e 0 * * * * /path/to/node /path/to/HDU-Net-Login.js >> /path/to/HDU-Net-Login.log 2>&1
/path/to/node
通过在 Terminal 中执行which node
获取
经过测试,脚本运行正常,可以实现登录功能
但是定时每小时运行还是不够完美,后续可以修改为持续的网络状态检测,发现网络断开后自动运行登录脚本