吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1048|回复: 8
收起左侧

[求助] 新手小白求助,求帮忙分析

[复制链接]
18377194 发表于 2022-7-15 09:55
31吾爱币
新手小白求助,求帮忙分析,求帮忙看一下,这个脚本是跟那个题库对比,看不懂,继续求助



// ==UserScript==
// @name         万华学习题库搜索
// @namespace    http://server.jcdev.cc:52126/
// @license      MIT
// @version      0.1.2
// @description  使用档案里的题库,对正在答卷的试题进行匹配,对于匹配到的试题给出正确答案
// @AuThor       LFTEC
// @match        https://learning.whchem.com:6443/*
// @match        https://learning.whchem.com:4443/*
// @Icon         https://learning.whchem.com:6443/favicon.ico
// @connect server.jcdev.cc
// @grant GM_xmlhttpRequest
// @grant GM_log
// @grant GM_addElement
// @grant unsafeWindow
// ==/UserScript==

(function() {
    'use strict';

    function sleep(time) {
        return new Promise(resolve => {
            setTimeout(() => {
                resolve(time);
            }, Math.floor(time * 1000))
        })
    }

    function checkElements(){
        return new Promise((resolve, reject) => {
            let interval = setInterval(() => {
                var element = document.getElementsByClassName('answerQuestion')[0];
                if(element != undefined) {

                    let title = document.getElementById("TimerHolder");
                    if(title == undefined) { return; }

                    sleep(1).then(() => checkElements())
                        .then((element) => appendAnswerLink(element));
                    clearInterval(interval);
                    resolve(element);
                } else {
                    return;
                }

            }, 500);
        });

    }

    function appendAnswerLink(element) {
        GM_log("检测到正在答题,插入获取答案按钮");

        let timerNode = document.getElementById('TimerHolder');
        let answerButton = document.getElementById('get_answer');
        if(!answerButton) {
            answerButton = document.createElement('a');
            answerButton.id = 'get_answer';
            answerButton.style = 'margin-left: 3em;';
            answerButton.innerText = '获取答案';
            answerButton.addEventListener('click', () => reportAnswer(element).then());
            timerNode.appendChild(answerButton);
            GM_log("获取答案按钮正确插入");
        }
    }

    function reportAnswer(element){
        return new Promise(resolve => {
            GM_log("获取答案中...");
            var elements = element.getElementsByClassName('swiper-slide');

            elements.forEach(question => {
                let questionItem = question.children[0];
                if(questionItem.id.substring(0,12) !== 'questionItem') {return;}
                let id = questionItem.id.substring(12);
                getAnswer(id).then((data) => fillAnswer(questionItem, data));
            });
        });
    }

    function getAnswer(tmid) {
        return new Promise(resolve => {
            GM_xmlhttpRequest({
                method: "GET",
                url: "http://server.jcdev.cc:52126/get?id=" + tmid,
                responseType: "json",
                onload: function(data) {
                    resolve(data.responseText);
                }
            });
        });

    }

    function fillAnswer(question, data){
        let id = question.id.substring(12);
        let trs = question.getElementsByClassName('question-select-item');
        if(trs.length === 0) {return;}
        let mapping = getAnswerMapping(trs);
        let answer = {};

        if (data == 'null') {
            GM_log("题库中不存在该题目");
            answer = {color: '#FF0000', text: '题库中不存在该题目'};
        }
        else if(data == undefined) {
            GM_log("获取题目时发生网络错误");
            answer = {color: '#FF0000', text: '获取题目时发生网络错误'};
        }
        else {
            let answers = JSON.parse(data)["Answers"].split(';');
            let newAnswers = [];
            answers.forEach(answer => {
                newAnswers.push(mapping[answer]);
            });
            newAnswers.sort();

            GM_log(newAnswers.join(';') + "/" + JSON.parse(data)["Answers"] + "/" + id);
            answer = {color: '#018AF4', text: "正确答案:" + newAnswers.join(';')};
        }
        

        let answerDiv = question.getElementsByClassName("question-item-right-answer")[0];
        InsertAnswerUIElement(answerDiv, answer);

    }

    function InsertAnswerUIElement(controller, answer) {
        let subController = controller.children;
        for(let i = subController.length - 1; i >= 0; i--) {
            controller.removeChild(subController);
        }

        let p = document.createElement('p');
        p.style.color = answer.color;
        p.innerText = answer.text;
        controller.appendChild(p);
    }

    function getAnswerMapping(answers) {
        let mapping = {};
        answers.forEach(answer => {
            let ori = answer.getAttribute('rel_label');
            let map = answer.getElementsByClassName('question-select-item-label')[0].innerText;
            mapping[ori] = map;
        });

        return mapping;
    }

    sleep(1).then(() => checkElements())
        .then((element) => appendAnswerLink(element));
})();

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

BurYiA 发表于 2022-7-15 10:13
从头到尾看一遍代码就很清晰了嘛

    function getAnswer(tmid) {
        return new Promise(resolve => {
            GM_xmlhttpRequest({
                method: "GET",
                url: "http://server.jcdev.cc:52126/get?id=" + tmid,
                responseType: "json",
                onload: function(data) {
                    resolve(data.responseText);
                }
            });
        });

    }
 楼主| 18377194 发表于 2022-7-15 10:15
BurYiA 发表于 2022-7-15 10:13
从头到尾看一遍代码就很清晰了嘛

    function getAnswer(tmid) {

我是小白,看不懂能帮忙翻译一下忙
BurYiA 发表于 2022-7-15 10:17
18377194 发表于 2022-7-15 10:15
我是小白,看不懂能帮忙翻译一下忙

啊这,就是这个接口嘛

http://server.jcdev.cc:52126/get?id=

它是利用这个接口来查题返回结果并处理的
 楼主| 18377194 发表于 2022-7-15 10:20
BurYiA 发表于 2022-7-15 10:17
啊这,就是这个接口嘛

http://server.jcdev.cc:52126/get?id=

为啥有的题目能自动显示答案,有的显示没有查到,借口不对还是?
 楼主| 18377194 发表于 2022-7-15 10:22
18377194 发表于 2022-7-15 10:20
为啥有的题目能自动显示答案,有的显示没有查到,借口不对还是?

需要改一下接口吗?
BurYiA 发表于 2022-7-15 10:23
18377194 发表于 2022-7-15 10:20
为啥有的题目能自动显示答案,有的显示没有查到,借口不对还是?

题库的问题
当搜索的题目在题库中没有记录的时候自然就无法处理咯

换个脚本用呗,之前用过  ocs网课助手 还不错,不清楚现在怎么样,可以试试
 楼主| 18377194 发表于 2022-7-15 10:24
BurYiA 发表于 2022-7-15 10:23
题库的问题
当搜索的题目在题库中没有记录的时候自然就无法处理咯

这个题库是脚本作者自己建立的,还是服务器上的
BurYiA 发表于 2022-7-15 10:29
18377194 发表于 2022-7-15 10:24
这个题库是脚本作者自己建立的,还是服务器上的

东西肯定是放在服务器上的,题库肯定也是碰不到修改不了的
所以让你换个找的试试嘛,油猴那么多脚本,为啥要死扣一个呢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 09:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表