欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【知道/智慧树】网课刷题·最终版本

程序员文章站 2022-03-07 13:42:48
因为学校开了一堆网课,而且都是美术体育之类的没什么用处,所以一直再找快捷的刷题方法,以前写过获取题目后使用微信搜题,但是还需要复制粘贴,今天找到了一个可以在线搜题的网站,让大佬封装了一下写了个脚本封装接口的大佬->@高厉害使用方法,按F12打开控制台粘贴代码即可获取答案function getquestion(question) {$.ajax({type: 'post',url: 'https://gaolihai.top/query',data: {type: 2,pwd: 'diany',...

因为学校开了一堆网课,而且都是美术体育之类的没什么用处,所以一直再找快捷的刷题方法,以前写过获取题目后使用微信搜题,但是还需要复制粘贴,今天找到了一个可以在线搜题的网站,让大佬封装了一下写了个脚本

封装接口的大佬->@高厉害

使用方法,按F12打开控制台粘贴代码即可获取答案

function getquestion(question,index){$.ajax({type:'post',async:false,url:'https://gaolihai.top/query',data:{type:2,pwd:'diany',question},success:(res)=>{console.log(index,res)},error:(xhr)=>{console.log('发生错误')}})}
var a=document.querySelectorAll('.subject_describe p');a.forEach((currentValue,index,arr)=>{getquestion(currentValue.innerText,index+1)});

【知道/智慧树】网课刷题·最终版本
为了使Ajax返回的题目是有序的,使用了jQuery的Ajax自带同步请求参数,但是这种同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行

对于题少的卷子来说没什么,题多了无法操控浏览器就只能干等,下面是回调大佬封装的Promise方法,可以实现顺序获取的同时,不锁住浏览器

function ajaxAsync(options) {
    return new Promise((resolve, reject) => {
        let { success, error } = options;
        delete options['success'], options['error'];
        $.ajax(options)
            .done(function (res) {
                success && success(res)
                resolve(res);
            }).fail(function (xhr) {
                error && error(xhr);
                resolve(xhr.responseJSON.message);
            });
    });
}

async function getQuestion(question, index) {
    return await ajaxAsync({
        type: 'post',
        url: 'https://gaolihai.top/query',
        data: {
            type: 2, pwd: 'diany', question
        },
        success: (res) => {
            console.log(index, res)
        },
        error: (xhr) => {
            try {
                console.log('发生错误:' + xhr.responseJSON.message)
            } catch (error) {
                console.log('发生错误:' + xhr.responseText)
            }

        }
    });
}
var a = document.querySelectorAll('.subject_describe p');
(async() => {
    for (let i=0;i<a.length;++i) {
        await getQuestion(a[i].innerText, i+1);
    }
})()

本文地址:https://blog.csdn.net/qq_43915356/article/details/107268252