HDUOJ增强

自动登录(不可用)HDUOJ,提供历史contests选项

目前為 2017-11-01 提交的版本,檢視 最新版本

// ==UserScript==
// @name         HDUOJ增强
// @namespace    YinTianliang_i
// @version      0.2.4
// @description  自动登录(不可用)HDUOJ,提供历史contests选项
// @author       Yin Tianliang
// @include      *//hdu.hustoj.com/*
// @include      *//acm.hdu.edu.cn/*
// @include      *//acm.split.hdu.edu.cn/*
// @require      https://code.jquery.com/jquery-3.2.1.min.js
// @grant        none
// @run-at       document-start
// ==/UserScript==
// alert('YES');
// console.log(window.location.toString())
// TODO:判断当前登录(不可用)状态

/*jshint esversion: 6 */

let getKey = (key) => { return window.localStorage[key]; };
let setKey = (key, value) => { window.localStorage[key] = value; };

function getInput(mes) {
    let input;
    do {
        input = prompt(mes);
    } while (input === null);
    return input;
}

function setUserInfo() {
    let username = getInput("请输入用户名:");
    let userpass = getInput("请输入密码:");
    setKey("username", username);
    setKey("userpass", userpass);
    return [username, userpass];
}

function contestLogin(contestID, contestPSW) {
    $.ajax({
        type: "post",
        url: `http://${window.location.host}/diy/contest_login.php?cid=${contestID}&action=login`,
        data: {
            Origin: `http://${window.location.host}`,
            Referer: `http://${window.location.host}`,
            password: contestPSW
        }
    });
}


// 如果跳转到了登录(不可用)界面,则开始执行逻辑
// 提取url中的contestID 判断是否在storage中
let reg = new RegExp("diy/contest_login.php.cid=(\\d+)");
let arr = window.location.toString().match(reg);
if (arr) {

    // 用户登录(不可用)
    let username = getKey("username");
    let userpass = getKey("userpass");
    let contestID = getKey("contestID");
    let contestPSW = getKey("contestPSW");
    if (username === undefined || userpass === undefined) {
        [username, userpass] = setUserInfo();
    }

    $.ajax({
        type: "post",
        url: `http://${window.location.host}/userloginex.php?action=login`,
        data: {
            Origin: `http://${window.location.host}`,
            Referer: `http://${window.location.host}`,
            username: username,
            userpass: userpass,
            login: "Sign In"
        }
    });


    // 单项测试登录(不可用)
    if (!new RegExp(arr[1]).test(contestID)) {
        let psw = getInput("该测试的口令未被记录,请输入该测试的口令");
        if (contestID === undefined) {
            contestID = arr[1];
            contestPSW = psw;
        } else {
            contestID += '|' + arr[1];
            contestPSW += '|' + psw;
        }
        setKey("contestID", contestID);
        setKey("contestPSW", contestPSW);
    }
    contestID = contestID.split('|');
    contestPSW = contestPSW.split('|');
    for (let i = 0; i < contestID.length; i++) {
        contestLogin(contestID[i], contestPSW[i]);
    }


    // 跳转到题目页面
    window.location.href = `http://${window.location.host}/diy/contest_show.php?cid=${arr[1]}`;
}

// 在页面顶端增加历史contests
let contestID = getKey("contestID").split('|');
let divObj = document.createElement("div");
divObj.style = 'text-align:center';
divObj.innerHTML = '历史contests:';
for (let i in contestID) {
    divObj.innerHTML += `<a href="/diy/contest_show.php?cid=${contestID[i]}">${contestID[i]} </a>`;
}
divObj.innerHTML += '<a href="javascript:localStorage.clear();window.location.reload()">清空数据</a>';
document.body.insertBefore(divObj, document.body.firstChild);

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址