Pinnacle Optimize

hdu pinnacle刷题网站的优化脚本。

目前为 2023-06-16 提交的版本。查看 最新版本

// ==UserScript==
// @name         Pinnacle Optimize
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  hdu pinnacle刷题网站的优化脚本。
// @author       Lycoiref
// @match        *://pinnacle-primary-fe.mjclouds.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=mjclouds.com
// @license      MIT
// @grant        none
// ==/UserScript==

(function () {
    'use strict'

    // Your code here...
    // hdu pinnacle刷题网站优化脚本
    window.onload = async () => {
        await new Promise((resolve) => {
            setTimeout(resolve, 100)
        })
        while (!document.querySelector('.items-center') || !document.querySelector('button') || !document.querySelector('.whitespace-pre-line')) {
            await new Promise((resolve) => {
                setTimeout(resolve, 100)
            })
        }
        let options = document.querySelectorAll('.items-center')
        let btns = document.querySelectorAll('button')
        let question = document.querySelector('.whitespace-pre-line')
        setInterval(() => {
            let cards = document.querySelectorAll('p')
            cards.forEach((card) => {
                if (card.innerText === '题库市场') {
                    window.location.reload()
                }
            })
        }, 100)

        window.addEventListener('keypress', (e) => {
            // QWER分别对应1234个选项
            switch (e.key) {
                case 'q':
                    options[0].click()
                    break
                case 'w':
                    options[1].click()
                    break
                case 'e':
                    options[2].click()
                    break
                case 'r':
                    options[3].click()
                    break
            }
            // 空格键对应下一题
            if (e.key === ' ') {
                console.log(btns)
                if (btns[1]?.attributes['disabled']) {
                    btns[2].click()
                    // 清除focus
                    document.activeElement.blur()
                } else {
                    btns.forEach((btn) => {
                        if (btn.innerText === '提交' || btn.innerText === '下一题') {
                            btn.click()
                            // 清除focus
                            document.activeElement.blur()
                        }
                    })
                }
            }
        })

        // 创建对question的观察进程
        let observerOptions = {
            childList: true,
            subtree: true,
            attributes: true,
            // 监听innerHTML的变化
            characterData: true
        }
        let observer = new MutationObserver((mutations) => {
            console.log('question changed')
            options = document.querySelectorAll('.items-center')
        })

        observer.observe(question, observerOptions)
    }
})()