慕课 & U校园自动答题脚本使用教程

您所在的位置:网站首页 电脑自动答题脚本怎么做 慕课 & U校园自动答题脚本使用教程

慕课 & U校园自动答题脚本使用教程

2024-07-13 19:04| 来源: 网络整理| 查看: 265

使用本文所述的脚本,可以自动完成慕课、U校园的答题,亦可用于刷课时等操作,大大提升学习效率!

下载软件 进入domooc下载网站,下载解压直用版http://cdn.lolzyx.xyz/domoocinstall

更新:domooc原版已经失效,需要重新下载最新版本:https://domooc.top/domoocinstall

选择箭头所指即可

下载完后解压,选择双击只用,打开浏览器,登录自己的mooc账号,即可正常使用domooc。

安装U校园脚本

在浏览器右上角点击油猴图标,再点击添加新脚本 然后复制粘贴以下的U校园脚本(点击代码块右上角一键复制): 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518// ==UserScript==// @name U校园unipus英语网课作业答案显示(不支持单元测试)// @namespace https://greasyfork.org// @version 1.8// @description 小窗口显示U校园板块测试答案// @icon https://ucontent.unipus.cn/favicon.ico// @match *://ucontent.unipus.cn/_pc_default/pc.html?*// @match *://u.unipus.cn/*// @connect unipus.cn// @connect fanyi.youdao.com// @connect translate.google.cn// @connect translate.google.com// @connect api.microsofttranslator.com// @connect api.fanyi.baidu.com// @grant GM_xmlhttpRequest// @grant GM_setClipboard// @grant GM_setValue// @grant GM_getValue// @run-at document-end// @require https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js// @require https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js// @license MIT// ==/UserScript==/** * Generate a random string * @param {number} length Length of this random string * @returns {string} The random string */function randomString(length) { let abc = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; let ret = ""; for (let i = 0; i < length; i++) { ret += abc.charAt(Math.floor(Math.random() * abc.length)); } return ret}/** * Generate a random num string * @param {number} length Length of this random num string * @returns {string} The random num string */function randomNumString(length) { let nums = "0123456789"; let ret = ""; for (let i = 0; i < length; i++) { ret += nums.charAt(Math.floor(Math.random() * nums.length)); } return ret}/** * Async wait, default to 10 ms * * @param {number} ms How long to wait (in millisecond) * @returns {Promise} */async function sleep(ms = 10) { // 异步等待,只阻塞当前脚本调用处函数,不阻塞整个浏览器 // 调用方法:await sleep() 或 await sleep (1000) return new Promise(function (resolve, reject) { setTimeout(() => { resolve(); }, ms); })}async function getRequest(url, headers = {}, timeout = 5000) { return new Promise(function (resolve, reject) { GM_xmlhttpRequest({ method: 'GET', url: url, headers: headers, timeout: timeout, onload: (xhr) => { resolve(xhr); }, onerror: (err) => { reject(err); }, ontimeout: (err) => { reject(err); } }); });}/** * Decrypt and parse "content" of XHR, thanks to SSmJaE for providing this function! * @param {String}} json Encrypted json or raw json string * @returns {Object} Object from raw json string */function parseJson(json) { if (json) { let r = json.content.slice(7) , o = CryptoJS.enc.Utf8.parse("1a2b3c4d" + json.k) , i = CryptoJS.enc.Hex.parse(r) , a = CryptoJS.enc.Base64.stringify(i) , contentJson = JSON.parse(CryptoJS.AES.decrypt(a, o, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.ZeroPadding }).toString(CryptoJS.enc.Utf8)); json = contentJson; console.log(json); } return json;}/** * Copy a string to clipboard * @param {string} str String to be copy */function copyMe(str) { function _legacyCopy() { console.log("正在使用传统方法复制"); let tmpInput = document.createElement('input'); elem.insertAdjacentHTML("afterend", tmpInput) tmpInput.value = str; tmpInput.focus(); tmpInput.select(); if (document.execCommand('copy')) { document.execCommand('copy'); } tmpInput.blur(); console.log('复制成功'); tmpInput.remove(); } if (GM_setClipboard) { GM_setClipboard(str); } else if (navigator.clipboard && window.isSecureContext) { console.log("正在使用 navigator clipboard api 进行复制操作"); navigator.clipboard.writeText(str) .catch(err => { console.log("navigator clipboard api 复制时出错,将使用传统方法进行复制") _legacyCopy(); }) } else { _legacyCopy(); }}/** * Get token * @returns {string} token or fallbackToken when error. */async function getToken() { let fallbackToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvcGVuX2lkIjoidHV4NkNCQVc4aGRrcnFZdzc5SEpEWDF2aTR5Z2ptcDUiLCJuYW1lIjoiIiwiZW1haWwiOiIiLCJhZG1pbmlzdHJhdG9yIjoiZmFsc2UiLCJleHAiOjE5MDI5NzAxNTcwMDAsImlzcyI6IlI0aG03RmxQOFdvS0xaMUNmTkllIiwiYXVkIjoiZWR4LnVuaXB1cy5jbiJ9.CwuQmnSmIuts3hHAMf9lT954rKHXUNkps-PfRJp0KnU"; let oldToken = GM_getValue("token"); if (oldToken && new Date(oldToken.expireWhen).getTime() > new Date().getTime()) { return oldToken.token; } let url = "https://u.unipus.cn/user/data/getToken"; let xhr = await getRequest(url).catch((err) => { console.error(err); layui.use("layer", function () { layer.alert(`获取 Token 失败,请刷新重试\n错误信息:${err}`); }); return fallbackToken; }); if (xhr.status != 200) { layui.use("layer", function () { layer.alert(`获取 Token 失败,请刷新重试`); }); return fallbackToken; } let obj = JSON.parse(xhr.responseText); if (!obj || !obj.token) return fallbackToken; let token = obj.token; let expireWhen = new Date() expireWhen.setDate(expireWhen.getDate() + 1); let tokenObj = { token: token, expireWhen: expireWhen, } GM_setValue("token", tokenObj); return token;}function main() { if (window.location.href.includes("u.unipus.cn")) { window.setInterval(function () { if (document.getElementsByClassName("layui-layer-shade").length > 0 && document.querySelectorAll(".layui-layer-dialog").length > 0) { // 去除环境检测弹窗 document.querySelector(".layui-layer-shade").remove(); document.querySelector(".layui-layer-dialog").remove(); } }, 100); } if (window.location.href.includes("ucontent.unipus.cn")) { $.getScript("https://cdn.staticaly.com/gh/placemarker/jQuery-MD5/master/jquery.md5.js"); $('head').append(''); $.getScript("https://lib.baomitu.com/layui/2.6.8/layui.js", function (data, status, jqxhr) { layui.use('element', function () { let element = layui.element; }); layer.closeAll(); show(); showanswer(); }); let autoClickPlay = window.setInterval(async function () { if (document.querySelector(".audio--aplayer-mute-2VMS7")) { window.clearInterval(autoClickPlay); await sleep(500); document.querySelector(".audio--aplayer-rate-ms-ZWyM6.audio--aplayer-rate-m-aH2Eu").querySelectorAll("span")[2].click(); await sleep(300); document.querySelector(".audio--aplayer-mute-2VMS7").click(); await sleep(300); document.querySelector(".audio--aplayer-play-3oL9n").click(); } }, 100); function show() { layer.open({ type: 1, area: ['310px', '400px'], offset: 'r', id: 'msgt', closeBtn: 1, title: " ", shade: 0, maxmin: true, anim: 2, content: ` ` }); } async function showanswer() { let url = location.href let arr = url.split("/") let unit = arr[arr.length - 2] let course = /course-v1:.*?\//g.exec(url); course = course[0]; let token = await getToken(); let xhr = await getRequest( `https://ucontent.unipus.cn/course/api/content/${course}${unit}/default/`, { 'X-ANNOTATOR-AUTH-TOKEN': token }, 5000 ).catch((err) => { console.error(err); let el = `答案加载失败,请刷新重试。`; $("#content>table>tbody").append($(el)); }); if (xhr.status != 200) { let el = `答案加载失败,请刷新重试。`; $("#content>table>tbody").append($(el)); return; } let obj = JSON.parse(xhr.responseText) || {}; if (!obj.content) { throw Error("U校园返回的内容中不包含'content'字段,请检查api是否改变!"); } let rawContent = parseJson(obj) || {}; let pages = {}; for (let key in rawContent) { let pageNo = 1; if (key.includes("content_")) { let re = /content_(\d+):/g.exec(key); pageNo = parseInt(re[1]); } pages[pageNo] = { key: key, content: rawContent[key] }; } let quesNo = /p_(\d+)/g.exec(url); quesNo = quesNo[1]; let key = pages[quesNo].key; let content = pages[quesNo].content; if (key.includes(":questions")) { // 选择题 let questionList = content.questions; for (let num = 0; num < questionList.length; num++) { let question = questionList[num]; let answerId = randomString(5); let btnId = randomString(5); let el = `${num + 1}. ${question.answers.join("、")}`; $("#content>table>tbody").append($(el)); $(`#${btnId}`).on("click", function () { let _answer = $(`#${answerId}`).text(); copyMe(_answer); }) } let interval = window.setInterval(async function () { if (document.querySelector(".questions--questionDefault-2XLzl.undefined")) { window.clearInterval(interval); for (let num = 0; num < questionList.length; num++) { let question = questionList[num]; let questionElem = document.querySelectorAll(".questions--questionDefault-2XLzl.undefined")[num] let options = questionElem.querySelectorAll(".clearfix"); if (options.length == 0) { options = questionElem.querySelectorAll(".MultipleChoice--checkbox-2_VGC"); } for (let answer of question.answers) { let sel = answer.toUpperCase().charCodeAt(0) - "A".charCodeAt(0); options[sel].click(); } await sleep(200); } } }, 1000); } else if (key.includes(":scoopquestions")) { // 填空题 let questionList = content.questions; for (let num = 0; num < questionList.length; num++) { let question = questionList[num]; let answerId = randomString(5); let btnId = randomString(5); let el = `${num + 1}. ${question.answers[0]}复制`; $("#content>table>tbody").append($(el)); $(`#${btnId}`).on("click", function () { let _answer = $(`#${answerId}`).text(); copyMe(_answer); }); } let interval = window.setInterval(function () { if (document.querySelector(".htmlViewBlank--holder_style-2dnxi")) { window.clearInterval(interval); $("#content>table>tbody").prepend($( `无需在此面板中复制,点击题目中的空,直接粘贴即可。` )) for (let num = 0; num < questionList.length; num++) { let answer = questionList[num].answers[0]; $(document.querySelectorAll(".htmlViewBlank--holder_style-2dnxi")[num]).on("click", function () { copyMe(answer); }); } } }, 500); } else if (key.includes(':shortanswer') && content.category === "shortanswer:shortAnswer") { // 翻译题 let question = content.content[0].html.html; question = question.replace(/|\(.*?\)|(.*?)/g, ""); let direction = 'zh2en'; if (/^[a-zA-Z\.,\s]+$/g.test(question.substring(0, 5))) direction = 'en2zh'; try { // 谷歌翻译 let googleTranslateXhr = await getRequest( `http://translate.google.cn/translate_a/single?client=gtx&dt=t&dj=1&ie=UTF-8&sl=${direction.split("2")[0]}&tl=${direction.split("2")[1]}&q=${encodeURIComponent(question)}` ); let googleTranslatedObj = JSON.parse(googleTranslateXhr.responseText); let googleTranslateResult = ""; for (let sentence of googleTranslatedObj.sentences) { googleTranslateResult += sentence.trans; } let answerId = randomString(5); let btnId = randomString(5); $("#content>table>tbody").append($(`谷歌翻译:${googleTranslateResult}复制`)); $(`#${btnId}`).on("click", function () { let _answer = $(`#${answerId}`).text(); copyMe(_answer); }); } catch (e) { console.error(e); } try { // 百度翻译 let appid = "20211128001012194"; let salt = randomString(10); let sec = "LmBTDmGsvh2Ww2ws2F2S"; let sign = md5(appid + question + salt + sec); let baiduTranslateXhr = await getRequest( `http://api.fanyi.baidu.com/api/trans/vip/translate?q=${encodeURIComponent(question)}&from=${direction.split("2")[0]}&to=${direction.split("2")[1]}&appid=${appid}&salt=${salt}&sign=${sign}` ); let baiduTranslateObj = JSON.parse(baiduTranslateXhr.responseText); let baiduTranslateResult = ""; for (let item of baiduTranslateObj.trans_result) { baiduTranslateResult += item.dst; } let answerId = randomString(5); let btnId = randomString(5); $("#content>table>tbody").append($(`百度翻译:${baiduTranslateResult}复制`)); $(`#${btnId}`).on("click", function () { let _answer = $(`#${answerId}`).text(); copyMe(_answer); }); } catch (e) { console.error(e); } try { // 必应翻译 let bingTranslateXhr = await getRequest( `http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=AFC76A66CF4F434ED080D245C30CF1E71C22959C&from=${direction.split("2")[0]}&to=${direction.split("2")[1]}&text=${encodeURIComponent(question)}` ); let bingTranslateResult = bingTranslateXhr.responseText.replace(//g, ""); if (!bingTranslateResult.includes("TranslateApiExceptionMethod")) { let answerId = randomString(5); let btnId = randomString(5); $("#content>table>tbody").append($(`必应翻译:${bingTranslateResult}复制`)); $(`#${btnId}`).on("click", function () { let _answer = $(`#${answerId}`).text(); copyMe(_answer); }); } } catch (e) { console.error(e); } try { let answer = content.analysis.html; answer = answer.replace(//g, ""); let el = `标准答案(仅供参考):${answer}`; $("#content>table>tbody").append($(el)); } catch (e) { console.error(e); } } else if (key.includes(':shortanswer') && content.category === "shortanswerScoop") { // 简答题 if (content.analysis.html.length > 0) { try { let answer = content.analysis.html; answer = answer.replace(//g, "").replace(/\d\.\s?(;)?/g, ""); let answerId = randomString(5); let btnId = randomString(5); let el = `标准答案(仅供参考):${answer}复制`; $("#content>table>tbody").append($(el)); $(`#${btnId}`).on("click", function () { let _answer = $(`#${answerId}`).text(); copyMe(_answer); }); } catch (e) { console.error(e); } } else { let questionList = content.questions; for (let i = 0; i < questionList.length; i++) { let question = questionList[i]; let answerId = randomString(5); let btnId = randomString(5); try { let answer = question.analysis.html.replace(//g, "").replace(/\d\.\s?(;)?/g, ""); let el = `${i + 1}.(仅供参考)${answer}复制`; $("#content>table>tbody").append($(el)); $(`#${btnId}`).on("click", function () { let _answer = $(`#${answerId}`).text(); copyMe(_answer); }); } catch (e) { console.error(e); } } } } else if (key.includes(":shortanswer") || key.includes(":scoopshortanswer")) { // 简答题 let questionList = content.questions; for (let i = 0; i < questionList.length; i++) { let question = questionList[i]; let answerId = randomString(5); let btnId = randomString(5); try { let answer = question.analysis.html.replace(//g, "").replace(/\d\.\s?(;)?/g, ""); let el = `${i + 1}.(仅供参考)${answer}复制`; $("#content>table>tbody").append($(el)); $(`#${btnId}`).on("click", function () { let _answer = $(`#${answerId}`).text(); copyMe(_answer); }); } catch (e) { console.error(e); } } } else if (key.includes(":sequence")) { // 排序题 for (let question of content.questions) { let answer = question.answer; let el = `${answer}`; $("#content>table>tbody").append($(el)); } } } window.onhashchange = () => { $("#content>table>tbody").empty(); main(); } }}(function () { 'use strict'; window.addEventListener('pjax:success', function () { // 将 main 函数绑定到 pjax 监听器上 console.log("pjax success"); main(); }); window.addEventListener('pushState', function (e) { console.log('change pushState'); main(); }); window.addEventListener('replaceState', function (e) { console.log('change replaceState'); main(); }); window.addEventListener('hashchange', function (event) { console.log(event, 'hashchange'); //main(); }) main();})(); 再点击左上角 文件->保存 ,即可正常使用U校园脚本。 进入U校园官网https://u.unipus.cn,登录,根据浮窗的提示即可答题。 选择题自动答题,填空题用鼠标点击答题框,然后直接ctrl+V粘贴即可!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3