// ==UserScript==
// @name FCQ网课通助手[全网题库][通用智能适配答题][刷课]
// @namespace http://tampermonkey6.net
// @version 1.0.48
// @description 支持【超星学习通】【智慧树】【职教云系列】【雨课堂】【考试星】【168网校】【u校园】【大学MOOC】【云班课】【优慕课】【继续教育类】【绎通云课堂】【九江系列】【柠檬文才】【亿学宝云】【优课学堂】【小鹅通】【安徽继续教育】 【上海开放大学】 【华侨大学自考网络助学平台】【良师在线】【和学在线】【人卫慕课】【国家开放大学】【山财培训网(继续教育)】【浙江省高等学校在线开放课程共享平台】【国地质大学远程与继续教育学院】【重庆大学网络教育学院】【浙江省高等教育自学考试网络助学平台】【湖南高等学历继续教育】【优学院】【学起系列】【青书学堂】【学堂在线】【英华学堂】【广开网络教学平台】等平台的测验考试,内置题库,如有疑问或无法使用加群:399697149 咨询
// @author button2
// @match *://*/*
// @run-at document-start
// @resource Table https://www.forestpolice.org/ttf/2.0/table.json
// @require https://lib.baomitu.com/promise-polyfill/8.3.0/polyfill.min.js
// @require https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.min.js
// @require https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js
// @require https://lib.baomitu.com/jquery/3.6.0/jquery.min.js
// @require https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/fingerprintjs2/2.1.4/fingerprint2.min.js
// @require https://cdn.jsdelivr.net/npm/fingerprintjs2@2.1.4/dist/fingerprint2.min.js
// @require https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/mustache.js/0.1/mustache.min.js
// @require https://cdn.jsdelivr.net/npm/crypto-js@4.1.1/crypto-js.min.js
// @require https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/crypto-js/4.1.1/crypto-js.min.js
// @grant GM_xmlhttpRequest
// @grant GM_addStyle
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_listValues
// @grant GM_deleteValue
// @grant GM_getResourceText
// @grant GM_getResourceURL
// @grant GM_addValueChangeListener
// @grant GM_removeValueChangeListener
// @grant GM_openInTab
// @grant GM_getTab
// @grant GM_saveTab
// @grant GM_getTabs
// @grant GM_registerMenuCommand
// @grant GM_unregisterMenuCommand
// @grant GM_setClipboard
// @grant GM_notification
// @grant GM_webRequest
// @grant GM_addElement
// @grant GM_download
// @grant GM_log
// @grant GM_info
// @connect gitee.com
// @connect cdn.staticfile.org
// @connect cdnjs.cloudflare.com
// @connect cdn.bootcss.com
// @connect cdn.bootcdn.net
// @connect cdn.staticfile.org
// @connect unpkg.com
// @connect www.e-campus.top
// @connect www.ncoa.org.cn
// @connect bytecdntp.com
// @connect icve.com.cn
// @connect icodef.com
// @connect muketool.com
// @connect ouchn.cn
// @connect xuetangx.com
// @connect yuketang.cn
// @connect jpush.cn
// @connect unipus.cn
// @connect www.kinglinkcrusher.com
// @connect greasyfork.org
// @connect smartedu.cn
// @connect zhihuishu.com
// @connect chaoxing.com
// @connect gaoxiaobang.com
// @connect njcedu.com
// @connect jsou.cn
// @connect ulearning.cn
// @connect kaoshixing.com
// @connect gaoxiaobang.com
// @connect open.com.cn
// @connect sflep.com
// @connect teacher.com.cn
// @connect chinaedu.net
// @connect sccchina.net
// @connect netinnet.cn
// @connect learnin.com.cn
// @connect ct-edu.com.cn
// @connect ismartlearning.cn
// @connect youshiyun.com.cn
// @connect qdjxjy.com.cn
// @connect icourse163.org
// @connect toyaml.com
// @connect webtrn.cn
// @connect gxmzu.edu.cn
// @connect courshare.cn
// @connect haipan.net
// @connect xiguashuwang.com
// @connect jiaoyu139.com
// @connect ahjxjy.cn
// @connect qingshuxuetang.com
// @connect 168wangxiao.com
// @connect xiaoe-tech.com
// @connect shou.org.cn
// @connect edu-xl.com
// @connect hexuezx.cn
// @connect pmphmooc.com
// @connect lyck6.cn
// @connect yinghuaonline.com
// @connect forchange.cn
// @connect tencent.com
// @connect chatforai.cc
// @connect aigcfun.com
// @connect theb.ai
// @connect binjie.site
// @connect xgp.one
// @connect luntianxia.uk
// @connect 51buygpt.com
// @connect extkj.cn
// @connect xjai.cc
// @connect xjai.pro
// @connect zw7.lol
// @connect xeasy.me
// @connect aifree.site
// @connect wuguokai.top
// @connect aidutu.cn
// @connect leiluan.cc
// @connect gptservice.xyz
// @connect gpt66.cn
// @connect ai.ls
// @connect letsearches.com
// @connect powerchat.top
// @connect wobcw.com
// @connect 68686.ltd
// @connect t66.ltd
// @connect t-chat.cn
// @connect aitianhu.com
// @connect anzz.top
// @connect ohtoai.com
// @connect freeopenai.xyz
// @connect supremes.pro
// @connect bnu120.space
// @connect free-chat.asia
// @connect aifks001.online
// @connect a0.chat
// @connect usesless.com
// @connect ftcl.store
// @connect sunls.me
// @connect pizzagpt.it
// @connect phind.com
// @connect bushiai.com
// @connect qdymys.cn
// @connect pp2pdf.com
// @connect aichatos.cloud
// @connect fakeopen.com
// @connect wuguokai.cn
// @connect gtpcleandx.xyz
// @connect esojourn.org
// @connect cveoy.top
// @connect chatcleand.xyz
// @connect 154.40.59.105
// @connect gptplus.one
// @connect xcbl.cc
// @connect hz-it-dev.com
// @connect 6bbs.cn
// @connect 38.47.97.76
// @connect lbb.ai
// @connect lovebaby.today
// @connect gamejx.cn
// @connect chat86.cn
// @connect ai001.live
// @connect ai003.live
// @connect ai006.live
// @connect promptboom.com
// @connect hehanwang.com
// @connect caipacity.com
// @connect chatzhang.top
// @connect 51mskd.com
// @connect forwardminded.xyz
// @connect 1chat.cc
// @connect minimax.chat
// @connect cytsee.com
// @connect skybyte.me
// @connect alllinkai1.com
// @connect baidu.com
// @connect geekr.dev
// @connect chatgptdddd.com
// @connect anfans.cn
// @connect bing.com
// @connect openai.com
// @connect aliyun.com
// @connect ai-yuxin.space
// @connect yuxin-ai.com
// @connect xfyun.cn
// @connect geetest.com
// @connect tiangong.cn
// @connect yeyu1024.xyz
// @connect chatglm.cn
// @connect bigmodel.cn
// @connect gptgo.ai
// @connect 360.cn
// @connect mixerbox.com
// @connect ohmygpt.com
// @connect muspimerol.site
// @connect frechat.xyz
// @connect youdao.com
// @connect youkexuetang.cn
// @connect cx-online.net
// @connect sxmaps.com
// @connect eswonline.com
// @connect ketangx.net
// @connect weirenzheng.cn
// @connect cqooc.com
// @connect edu-edu.com.cn
// @connect fjnu.cn
// @connect yxbyun.com
// @connect kaoshixing.com
// @connect beeouc.com
// @connect edu-edu.com
// @connect bossyun.com
// @connect reseayun.com
// @connect sww.com.cn
// @connect jinkex.com
// @connect zikaoj.com
// @connect ls365.net
// @connect ls365.com
// @connect 91huayi.com
// @connect shandong-energy.com
// @connect ttcdw.cn
// @connect wjx.top
// @connect coursera.org
// @connect ahjxjy.cn
// @connect hbcjpt.com
// @connect whu.edu.cn
// @connect xjyxjyw.com
// @connect yxlearning.com
// @connect aqscpx.com
// @connect dayoo.com
// @connect ncme.org.cn
// @connect tikuhai.com
// @connect enncy.cn
// @connect ocsjs.com
// @connect mhtall.com
// @connect ustcyun.cn
// @connect 0991xl.com
// @connect hbysw.org
// @connect cj-edu.com
// @connect gzbjyzjxjy.cn
// @connect superchutou.com
// @connect zaixiankaoshi.com
// @connect ynjspx.cn
// @connect zhifa315.com
// @connect jxjypt.cn
// @connect hnzkw.org.cn
// @connect wentaionline.com
// @connect chinahrt.com
// @connect ha.cn
// @connect tv168.cn
// @connect 59iedu.com
// @connect cdeledu.com
// @connect cncecyy.com
// @connect jste.net.cn
// @connect ls365.net
// @connect brjxjy.com
// @connect dyhrsc.cn
// @connect vmserver.cn
// @connect qdu.edu.cn
// @connect xidian.edu.cn
// @connect swust.net.cn
// @connect ggcjxjy.cn
// @connect hebyunedu.com
// @connect ncu.edu.cn
// @connect jijiaool.com
// @connect zikaosw.cn
// @connect cmechina.net
// @connect ewt360.com
// @connect qlteacher.com
// @connect mxdxedu.com
// @connect ityxb.com
// @connect uooc.net.cn
// @connect scxfks.com
// @connect tsinghuaelt.com
// @connect enaea.edu.cn
// @connect gzsrs.cn
// @connect yanxiu.com
// @connect zxhnzq.com
// @connect chinaacc.com
// @connect ncet.edu.cn
// @connect tcmjy.org
// @connect baidu.com
// @connect xidian.edu.cn
// @connect whut.edu.cn
// @connect yooc.me
// @connect cj-edu.com
// @connect cncecyy.com
// @connect cjnep.net
// @connect zikao365.com
// @connect enetedu.com
// @connect xueyinonline.com
// @connect kepeiol.com
// @connect brjxjy.com
// @connect ketangx.net
// @connect chinamde.cn
// @connect examcoo.com
// @connect 345u.net
// @connect zgzjzj.com
// @connect twt.edu.cn
// @connect jctnb.org.cn
// @connect 21tb.com
// @connect zj.gov.cn
// @connect zikaosw.cn
// @connect spicti.com
// @connect haoyisheng.com
// @connect enaea.edu.cn
// @connect gzsrs.cn
// @connect yanxiu.com
// @connect ncet.edu.cn
// @connect chinahrt.com
// @connect zxhnzq.com
// @connect ghlearning.com
// @connect qlu.edu.cn
// @connect baidu.com
// @connect hii.cn
// @connect hustsnde.com
// @connect zgzjzj.com
// @connect peishenjy.com
// @connect axetk.cn
// @connect ipmph.com
// @connect hnscen.cn
// @connect coursera.cn
// @connect udemy.cn
// @connect edx.cn
// @connect wutp.com
// @connect imu.edu.cn
// @connect mhys.com.cn
// @connect cumt.edu.cn
// @connect scit-edu.cn
// @connect smartchutou.com
// @connect anpeiwang.com
// @connect gdut.edu.cn
// @connect dwzpzx.com
// @connect gzucm.edu.cn
// @connect jxuas.edu.cn
// @connect 51sunshining.com
// @connect hzau.edu.cn
// @connect tisco.com.cn
// @connect myunedu.com
// @connect snnu.edu.cn
// @connect hiaskc.com
// @connect mynep.com
// @connect sinotrans.com
// @connect educoder.net
// @connect eduwest.com
// @connect 345u.net
// @connect sclecb.cn
// @connect jctnb.org.cn
// @connect kuxiao.cn
// @connect hsd-es.com
// @connect caq.org.cn
// @connect nwpu.edu.cn
// @connect zhixueyun.com
// @connect twt.edu.cn
// @connect htsdedu.com
// @connect zhongancloud.com
// @connect taoke.com
// @connect wuxiantiaozhan.com
// @connect qutjxjy.cn
// @connect yidiankai.net
// @connect ncu.edu.cn
// @connect gdhkmooc.com
// @connect mxdxedu.com
// @connect 21tb.com
// @connect haoyisheng.com
// @connect tencentcs.com
// @connect jijiaox.com
// @connect czpx.cn
// @connect ntu.edu.cn
// @connect zsbxx.cn
// @connect xjcde.com
// @connect e-megasafe.com
// @connect 5any.com
// @connect euibe.com
// @connect whxunw.com
// @connect geron-e.com
// @connect gsjtpxzx.com
// @connect zygbxxpt.com
// @connect ibotok.com
// @connect qhce.gov.cn
// @connect pintia.cn
// @connect jsut.edu.cn
// @connect bjou.edu.cn
// @connect gdsf.gov.cn
// @connect qztc.edu.cn
// @connect jiangnan.edu.cn
// @connect wencaischool.net
// @connect ctce.com.cn:8081
// @connect wjx.cn
// @connect pbcexam.cn
// @connect chnenergy.com.cn
// @connect ynou.edu.cn
// @connect mwr.gov.cn
// @connect safecn.top
// @connect yiban.cn
// @connect bspapp.com
// @connect qust.edu.cn
// @connect lut.edu.cn
// @connect whcp.edu.cn
// @connect chinamobile.com
// @connect whcp.edu.cn
// @connect swufe-online.com
// @connect gaoxiaokaoshi.com
// @connect gdcxxy.net
// @connect dyhgp.com.cn
// @connect yunxuetang.cn
// @connect oberyun.com
// @connect wsglw.net
// @connect zaixian100f.com
// @connect njupt.edu.cn
// @connect neuedu.com
// @connect mynj.cn
// @connect zikao.com.cn
// @connect swpu.edu.cn
// @connect nbut.edu.cn
// @connect jmu.edu.cn
// @connect ouchn.edu.cn
// @connect hnzjpx.net
// @connect 21train.cn
// @connect ccccltd.cn
// @connect faxuanyun.com
// @connect ah.cn
// @connect tk.icu
// @connect ketangpai.com
// @connect keyonedu.com
// @connect stdu.edu.cn
// @connect cloudwis.tech
// @connect gdedu.gov.cn
// @connect mianyang.cn
// @connect ahhjsoft.com
// @connect juchiedu.com
// @connect jtzyzg.org.cn
// @connect lyunedu.com
// @connect rdyc.cn
// @connect ynau.edu.cn
// @connect xuexi.cn
// @connect zzu.edu.cn
// @connect mystuff.com.cn
// @connect treewises.com
// @connect hotmatrix.cn
// @connect uu-ka.cn
// @connect dbask.net
// @connect thsk.me
// @connect gochati.cn
// @connect repl.co
// @connect lemtk.xyz
// @connect 985211.life
// @connect jsdelivr.net
// @connect cdnjs.net
// @connect upai.com
// @connect 121.37.181.234
// @connect 134.175.72.16
// @connect 119.6.233.156
// @connect 49.232.135.103
// @connect 121.4.44.3
// @connect 101.200.60.10
// @connect 173.82.206.140
// @connect 106.13.194.221
// @connect 101.35.141.127
// @connect 119.45.63.245
// @connect 101.42.4.139
// @connect 123.249.44.94
// @connect 163.197.213.153
// @connect 20.222.22.93
// @connect 8.217.54.192
// @connect 121.43.35.12
// @connect 154.204.178.24
// @connect 142.171.5.216
// @connect 154.12.17.67
// @connect 120.55.15.168
// @connect 82.157.148.227
// @connect 8.130.121.197
// @connect 119.91.102.43
// @connect 39.105.36.225
// @connect 124.71.235.46
// @connect 13.91.97.210
// @connect 43.138.153.244
// @connect 122.114.171.124
// @connect 43.143.181.158
// @connect 47.108.112.179
// @connect 154.40.42.63
// @connect 39.105.186.109
// @connect 14.29.190.187
// @connect 118.195.130.244
// @connect 62.234.36.191
// @connect 150.138.77.237
// @connect 47.121.140.50
// @connect 156.236.117.109
// @connect 121.36.70.254
// @connect 49.235.150.29
// @connect 82.157.105.20
// @connect 39.105.186.109
// @connect mcsever.xyz
// @connect tcloudbaseapp.com
// @connect ylnu.edu.cn
// @connect yuyuetiku.com
// @connect pearktrue.cn
// @connect ynny.cn
// @connect zjlll.net
// @connect lovezhc.cn
// @connect localhost
// @connect gyrs.xyz
// @connect gyrs.top
// @connect qq.com
// @connect 51aidian.com
// @connect 611qk.com
// @connect zxtiku.com
// @connect you-yun.com.cn
// @connect yktong.net
// @connect nmgdj.gov.cn
// @connect toujianyun.com
// @connect gxpf.cn
// @connect 51xinwei.com
// @connect ibodao.com
// @connect szou.edu.cn
// @connect yncjxy.com
// @connect moycp.com
// @connect htexam.com
// @connect alicdn.com
// @connect staticfile.net
// @connect zxx.edu.cn
// @connect eduyun.cn
// @connect rzcwl.com
// @connect 101.com
// @connect zjtvu.edu.cn
// @connect hnust.edu.cn
// @connect hnsyu.net
// @connect zut.edu.cn
// @connect hfut.edu.cn
// @connect xust.edu.cn
// @connect xueyinonline.com
// @connect cqrspx.cn
// @connect cugbonline.cn
// @connect xynu.edu.cn
// @connect neauce.com
// @connect ecnusole.com
// @connect xinyingzao.cn
// @connect w-ling.cn
// @connect aust.edu.cn
// @connect ahmooc.cn
// @connect pinganmeiyu.com
// @connect bjxtwlkj.com
// @connect finedu.com.cn
// @connect cdcas.com
// @connect gyrs.online
// @connect tiku.me
// @connect 808860.xyz
// @connect repl.co
// @connect ioscx.com
// @connect ksrr.net
// @connect bobo91.com
// @connect promplate.dev
// @connect binjie.fun
// @connect gptforlove.com
// @connect yeyu2048.xyz
// @connect webtrncdn.com
// @connect suda.edu.cn
// @connect xjjwedu.com
// @connect gxmzu.edu.cn
// @connect cug.edu.cn
// @connect cuc.edu.cn
// @connect jsnu.edu.cn
// @connect henu.edu.cn
// @connect ahu.edu.cn
// @connect smu.edu.cn
// @connect nuaa.edu.cn
// @connect rtjy.com.cn
// @connect cqust.edu.cn
// @connect bjtu.edu.cn
// @connect bzpt.edu.cn
// @connect gyrs.fun
// @connect 91faka.com
// @connect o-learn.cn
// @connect lidapoly.edu.cn
// @connect baichuan-ai.com
// @connect chatforai.store
// @connect onrender.com
// @connect 168xc.top
// @connect xiguashuwang.com
// @connect hangzhou.gov.cn
// @connect chatgpt.com
// @connect gking.me
// @connect aichatos8.xyz
// @connect caifree.com
// @connect 644566.xyz
// @connect matools.com
// @connect xjrsjxjy.com
// @connect shqszx.com
// @connect xju.edu.cn
// @connect myccr.net
// @connect 5zk.com.cn
// @connect zjtvu.edu.cn
// @connect sdsafeschool.gov.cn
// @connect cqsdx.cn
// @connect huashenxt.com
// @connect ahut.edu.cn
// @connect jsduxing.com
// @connect hut.edu.cn
// @connect xzit.edu.cn
// @connect fjdfxy.com
// @connect longzhi.net.cn
// @connect jcpx-psych.com
// @connect zhi-ti.com
// @connect szqinqi.com
// @connect chineseworkers.com.cn
// @connect cfyedu.com
// @connect mynj.cn
// @connect zbwsrc.cn
// @connect qwjiaoyu.com
// @connect aitianhu1.top
// @connect wwwwqq.com
// @connect viaa.fun
// @connect wendabao-a.top
// @connect bixin123.com
// @connect ai365vip.com
// @connect ichuang.top
// @connect ichat2019.com
// @connect tinycms.xyz
// @connect jaze.top
// @connect chkzh.com
// @connect wanjuantiku.com
// @connect 611520.cn
// @connect moiu.cn
// @connect tttt.ee
// @connect hnvist.cn
// @connect mosoteach.cn
// @connect qcloud.la
// @connect 127.0.0.1
// @connect *
// @antifeature payment
// @antifeature referral-link
// @license MIT
// ==/UserScript==
const HAS_GM = typeof GM !== 'undefined';
const NEW_GM = ((scope, GM) => {
// Check if running in Tampermonkey and if version supports redirect control
if (GM_info.scriptHandler !== "Tampermonkey" || compareVersions(GM_info.version, "5.3.2") < 0) return;
// Backup original functions
const GM_xmlhttpRequestOrig = GM_xmlhttpRequest;
const GM_xmlHttpRequestOrig = GM.xmlHttpRequest;
function compareVersions(v1, v2) {
const parts1 = v1.split('.').map(Number);
const parts2 = v2.split('.').map(Number);
const length = Math.max(parts1.length, parts2.length);
for (let i = 0; i < length; i++) {
const num1 = parts1[i] || 0;
const num2 = parts2[i] || 0;
if (num1 > num2) return 1;
if (num1 < num2) return -1;
}
return 0;
}
// Wrapper for GM_xmlhttpRequest
function GM_xmlhttpRequestWrapper(odetails) {
// If redirect is manually set, simply pass odetails to the original function
if (odetails.redirect !== undefined) {
return GM_xmlhttpRequestOrig(odetails);
}
// Warn if onprogress is used with settings incompatible with fetch mode used in background
if (odetails.onprogress || odetails.fetch === false) {
console.warn("Fetch mode does not support onprogress in the background.");
}
const {
onload,
onloadend,
onerror,
onabort,
ontimeout,
...details
} = odetails;
// Set redirect to manual and handle redirects
const handleRedirects = (initialDetails) => {
const request = GM_xmlhttpRequestOrig({
...initialDetails,
redirect: 'manual',
onload: function(response) {
if (response.status >= 300 && response.status < 400) {
const m = response.responseHeaders.match(/Location:\s*(\S+)/i);
// Follow redirect manually
const redirectUrl = m && m[1];
if (redirectUrl) {
const absoluteUrl = new URL(redirectUrl, initialDetails.url).href;
handleRedirects({ ...initialDetails, url: absoluteUrl });
return;
}
}
if (onload) onload.call(this, response);
if (onloadend) onloadend.call(this, response);
},
onerror: function(response) {
if (onerror) onerror.call(this, response);
if (onloadend) onloadend.call(this, response);
},
onabort: function(response) {
if (onabort) onabort.call(this, response);
if (onloadend) onloadend.call(this, response);
},
ontimeout: function(response) {
if (ontimeout) ontimeout.call(this, response);
if (onloadend) onloadend.call(this, response);
}
});
return request;
};
return handleRedirects(details);
}
// Wrapper for GM.xmlHttpRequest
function GM_xmlHttpRequestWrapper(odetails) {
let abort;
const p = new Promise((resolve, reject) => {
const { onload, ontimeout, onerror, ...send } = odetails;
send.onerror = function(r) {
if (onerror) {
resolve(r);
onerror.call(this, r);
} else {
reject(r);
}
};
send.ontimeout = function(r) {
if (ontimeout) {
// See comment above
resolve(r);
ontimeout.call(this, r);
} else {
reject(r);
}
};
send.onload = function(r) {
resolve(r);
if (onload) onload.call(this, r);
};
const a = GM_xmlhttpRequestWrapper(send).abort;
if (abort === true) {
a();
} else {
abort = a;
}
});
p.abort = () => {
if (typeof abort === 'function') {
abort();
} else {
abort = true;
}
};
return p;
}
// Export wrappers
GM_xmlhttpRequest = GM_xmlhttpRequestWrapper;
scope.GM_xmlhttpRequestOrig = GM_xmlhttpRequestOrig;
const gopd = Object.getOwnPropertyDescriptor(GM, 'xmlHttpRequest');
if (gopd && gopd.configurable === false) {
return {
__proto__: GM,
xmlHttpRequest: GM_xmlHttpRequestWrapper,
xmlHttpRequestOrig: GM_xmlHttpRequestOrig
};
} else {
GM.xmlHttpRequest = GM_xmlHttpRequestWrapper;
GM.xmlHttpRequestOrig = GM_xmlHttpRequestOrig;
}
})(this, HAS_GM ? GM : {});
if (HAS_GM && NEW_GM) GM = NEW_GM;
if(typeof GM_xmlhttpRequest=='undefined'||GM_info.scriptHandler=='stay'){
alert("由于兼容性问题,FCQ脚本不支持【油猴子(Greasemonkey)或Stay for Browser】插件使用,请使用【篡改猴/油猴(tampermonkey)】插件或【脚本猫(scriptcat)】插件安装此脚本,安装地址:https://www.crxsoso.com/webstore/detail/dhdgffkkebhmkfjojejmpbldmpobfkfo 安装教程:https://www.youxiaohou.com/zh-cn/crx.html?spm=1717453534064 如果反复提示此信息,请从插件中删除此脚本")
return ;
}
setInterval(()=>{
if(window.xm_ui){
var content=window.xm_ui.find("#xm_share:contains(更新)").clone()
window.xm_ui.find("#xm_share:contains(更新)").remove()
window.xm_ui.find('#xm_state').before(content.attr("id","xm_update").click(()=>{
window.open("https://greasyfork.org/zh-CN/scripts/502159-fcq%E7%BD%91%E8%AF%BE%E9%80%9A%E5%8A%A9%E6%89%8B-%E5%85%A8%E7%BD%91%E9%A2%98%E5%BA%93-%E9%80%9A%E7%94%A8%E6%99%BA%E8%83%BD%E9%80%82%E9%85%8D%E7%AD%94%E9%A2%98-%E5%88%B7%E8%AF%BE")
}))
}
},1000)
var flagx=false
var ready_main=()=>{
if(window.ggxmm){
setInterval(()=>{
var $=$_
console.log('循环运行')
if($(".el-message-box:contains(本小节学习已完成) span:contains(确定):visible").length||$('.vjs-remaining-time-display').text()=='-0:00'){
$(".el-message-box:contains(本小节学习已完成) span:contains(确定):visible").click()
console.log('学习完成')
setTimeout(()=>{
$('font:contains(播放下一节)').click()
},500)
}else{
$('.vjs-big-play-button').click()
}
},1000)
}
function gV(){
return GM_getValue("oc")
}
function loop(){
setTimeout(()=>{
if (window.self !== window.top){
return;
}
let videoElem;
videoElem = document.querySelector('#iframe').contentDocument.querySelector('iframe').contentDocument.querySelector('#video_html5_api');
if (!videoElem){
return;
}
let videoLi = document.querySelectorAll('.posCatalog_name');
let videoCu = document.querySelector('.posCatalog_active span');
let videoNext;
for (let i=0,len=videoLi.length;i < len;i++){
if (videoLi[i] == videoCu){
videoNext = videoLi[i+1];
break;
}
}
function AnsQues(){
let check = setInterval(()=>{
try{
let text = document.querySelector('iframe').contentDocument.querySelector('iframe').contentDocument.querySelector('iframe').contentDocument.querySelector('body > div:last-child').innerText;
if (text.slice(0,5) === '答题已完成'){
clearInterval(check);
document.querySelector('iframe').contentDocument.querySelector('iframe').contentDocument.querySelector('iframe').contentDocument.querySelector('.Btn_blue_1').click()
setTimeout(()=>{
document.querySelector('iframe').contentDocument.querySelector('iframe').contentDocument.querySelector('iframe').contentDocument.querySelector('#confirmSubWin .bluebtn').click()
setTimeout(()=>{
videoNext.click();
if (videoNext != videoLi[videoLi.length-1]){
loop();
}
},2000)
},50)
return;
}
else if (text.match('题目待完善')){
clearInterval(check);
videoNext.click();
if (videoNext != videoLi[videoLi.length-1]){
loop();
}
return;
}
}
catch{
}
},2000)
}
let jobLeft;
try {
jobLeft = document.querySelector('.posCatalog_active input').value;
}
catch {
videoNext.click();
if (videoNext != videoLi[videoLi.length-1]){
loop();
}
return;
}
if (jobLeft == 2){
videoElem.onended = ()=>{
document.querySelector('#dct2').click();
setTimeout(AnsQues,2000);
}
}
else if (jobLeft == 1){
if (!document.querySelector('#iframe').contentDocument.querySelector('.ans-job-finished')){
videoElem.onended = videoNext.click();
}
else {
document.querySelector('#dct2').click();
setTimeout(AnsQues,2000);
}
}
},5000);
}
function taolun(){
const body = document.querySelector("body")
const btn = document.createElement("button")
btn.onclick = allComment
btn.style.padding = "10px"
btn.style.backgroundColor = "skyblue"
btn.style.position = "fixed"
btn.style.right = "100px"
btn.style.top = "400px"
btn.textContent = "一键回复"
body.appendChild(btn)
async function allComment() {
console.log("1111")
const name = document.querySelector(".zt_u_name").textContent
const commentDoms = document.querySelectorAll("#showTopics .content1118 .oneDiv")
for (let i = 0; i < commentDoms.length; i++) {
if (commentDoms[i].innerHTML.indexOf(name) === -1) {
const comment = commentDoms[i].querySelector(".hf_pct").textContent
const replyBtn = commentDoms[i].querySelector(".clearfix .tl1")
replyBtn.click()
let textarea = commentDoms[i].querySelector(".plDiv textarea")
while (!textarea) {
textarea = commentDoms[i].querySelector(".plDiv textarea")
}
textarea.value = comment
const uploadBtn = commentDoms[i].querySelector(".plDiv grenBtn")
uploadBtn.click()
await new Promise((re) => {
setTimeout(() => { re() }, 200)
})
console.log(comment, replyBtn)
}
}
}
}
function dafen(){
var button = document.createElement('button');
button.innerHTML = '一键打分';
button.style.position = 'absolute'; // 或者 'absolute' 如果您想要相对于某个容器定位
button.style.top = '10px'; // 距离顶部 10px
button.style.left = '50%'; // 居中
button.style.zIndex = '9999';
button.style.padding = '10px';
button.style.backgroundColor = '#008CBA';
button.style.color = 'white';
button.style.border = 'none';
button.style.borderRadius = '5px';
button.style.cursor = 'pointer';
document.body.appendChild(button);
// 点击按钮时的处理函数
button.onclick = function() {
// 获取所有具有 class "inputBranch makeScore" 的 input 元素
const inputs = document.querySelectorAll('input.inputBranch.makeScore');
// 遍历这些 input 元素
inputs.forEach(input => {
// 获取 input 元素的 data 属性值
const dataValue = input.getAttribute('data');
// 将 data 属性值赋给 value 属性
input.value = dataValue;
});
//总分
var fullScoreElement = document.getElementById("fullScore");
// 获取id为sumScore的元素
var sumScoreElement = document.getElementById("sumScore");
// 检查这两个元素是否存在
if (fullScoreElement && sumScoreElement) {
// 将fullScore的value值赋给sumScore的value
sumScoreElement.value = fullScoreElement.value;
document.querySelector('.jb_btn_92.fr.fs14.marginLeft30').click();
}
};
}
function daochu(){
// 定义一个函数来导出题目
function exportQuestions() {
var questions = $('.stem_con');
var output = '';
questions.each(function(index) {
var questionText = $(this).find('p').text().trim();
var options = $(this).next('.stem_answer').find('.num_option, .answer_p');
// 寻找紧接在当前题目的下一个.answerDiv作为答案部分
var nextAnswerDiv = $(this).nextUntil('.stem_con').filter('.answerDiv');
var answer = nextAnswerDiv.find('.answer_tit p').text().trim();
output += (index + 1) + '. ' + questionText + '\r\n';
options.each(function(optionIndex) {
if (optionIndex % 2 === 0) { // 选项字母
var letter = $(this).text().trim();
output += letter + ' ';
} else { // 选项文本
output += $(this).text().trim() + '\r\n';
}
});
output += '#' + answer + '#\r\n';
});
saveStringToFile("<TikS><本试卷使用TikN学习通导出工具V1.0自动生成>" + output,"导出习题.tik")
}
function saveStringToFile(str, filename) {
var blob = new Blob([str], {type: "text/plain;charset=utf-8"});
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = filename;
link.click();
}
// 当页面加载完成时执行导出函数
$(document).ready(exportQuestions);
}
var qq_group="399697149"
unsafeWindow.$_=$
if (window.location.href.indexOf("https://service.icourses.cn/") != -1) {
const config = {
pdf_time: 20 * 60 * 1000//30分鐘
}
let ChapterList = []
function GetRessList(id) {
return new Promise((resolve, reject) => {
GM_xmlhttpRequest({
url: "https://service.icourses.cn/hep-company//sword/company/getRess",
method: "POST",
data: "sectionId=" + id,
headers: {
"Content-type": "application/x-www-form-urlencoded; charset=UTF-8"
},
onload: function (xhr) {
try {
resolve(JSON.parse(xhr.responseText).model.listRes)
}
catch (err) {
resolve([])
}
}
});
})
}
function OpenOriginDialog(Content) {
return new Promise((resolve, reject) => {
unsafeWindow.require(["Play"], function (Play) {
let courseId = unsafeWindow._courseId;
let userId = unsafeWindow._userId;
let companyCode = unsafeWindow._companyCode;
const ListenMessage = (e) => {
if (e.data === 'lhd_close') {
unsafeWindow.removeEventListener('message', ListenMessage)
document.querySelector('[id^=dialog-myModal]')?.remove()
resolve()
}
}
unsafeWindow.addEventListener('message', ListenMessage);
Play.dialog({
//唯一ID
id: "videoBox-link",
data: {
url: Content.fullResUrl,
companyCode: companyCode,//三方公司id
resId: Content.id,
type: Content.mediaType,
userId: userId,
courseId: courseId,
title: Content.title + ''
},
//弹出框宽度
width: "auto",
//弹出框高度
height: (screen.availHeight - 200) + "px",
//是否开启打点功能
isTicker: true
});
})
})
}
async function ExecteContentMission(Contet) {
return new Promise(async (resolve, reject) => {
await OpenOriginDialog(Contet)
//执行相关内容
resolve()
})
}
async function AutoExecteChaprterMission(ChapterList) {
for (let index = 0; index < ChapterList.length; index++) {
let CurrentChapert = ChapterList[index]//获取每个章
let ContentList = await GetRessList(CurrentChapert)//获取该章数据
for (let ContentIndex = 0; ContentIndex < ContentList.length; ContentIndex++) {
let CurrentContent = ContentList[ContentIndex]//遍历内容数据列表
await ExecteContentMission(CurrentContent)//执行内容
}
}
}
function InjectButtonToBody() {
let btn = document.createElement("div");
btn.innerHTML = '<button style="position: fixed;bottom: 80vw;right: 0;z-index: 9999;height: 50px;">开始刷课</button>';
btn.onclick = function () {
ChapterList = []
ChapterList = ChapterList.concat(...document.querySelectorAll(".shareResources > .panel-group > li"))
let ParentChapert = document.querySelectorAll(".shareResources > .panel-group > li:not(.noContent)")
ParentChapert.forEach((item) => {
ChapterList = ChapterList.concat(...item.querySelectorAll(".chapter-content [data-secid]"))
});
ChapterList = ChapterList.map((item) => item.getAttribute("data-id") ?? item.getAttribute("data-secid"))
AutoExecteChaprterMission(ChapterList)
}
document.body.append(btn);
}
function InjectVideoPage() {
unsafeWindow.savevideojs = undefined
Object.defineProperty(unsafeWindow, 'videojs', {
get() {
let result = unsafeWindow.savevideojs;
return result
},
set(vdobj) {
vdobj.hook('beforesetup', function (videoEl, options) {
options.muted = true;
options.autoplay = true;
return options;
});
vdobj.hook('setup', function (player) {
player.on("ended", function () {
});
});
unsafeWindow.savevideojs = vdobj;
}
})
}
function InjectPdfPage() {
setTimeout(() => {
}, config.pdf_time)
}
function MainBranch() {
if (location.href.indexOf('/sword/rp/play/toPlay') !== -1) {
InjectVideoPage()
} else if (location.href.indexOf('/icourse/lib/pdfjs/web/') !== -1) {
InjectPdfPage()
} else {
InjectButtonToBody()
}
}
MainBranch()
}
setTimeout(()=>{
if(GM_getValue('userFirst')&&window.location == window.parent.location&&!unsafeWindow.fcq_state){
GM_setValue('fingerprintDate',GM_getValue('fingerprintDate')||new Date().getTime())
if(new Date().getTime()-GM_getValue('fingerprintDate')>30*1000&&GM_getValue('fingerprintLog')&&GM_getValue('fingerprintLog')['step4']!=0){
alert('FCQ脚本出错,请加群'+qq_group+'联系bug管理员处理,修复完成后将会获得1000搜题积分奖励')
}
}
},2000)
if (window.location.href.indexOf("https://hzzh.chsi.com.cn/kc/xx/") != -1) {
let rate = 2;//倍速
unsafeWindow.onload = function () {
//在元素都加载完成后再监听video的播放时间,再进行倍速设置
unsafeWindow.document.querySelector('video').onplay = function () {
unsafeWindow.document.querySelector('video').playbackRate = rate;
}
let hookSetInterval = unsafeWindow.setInterval;
unsafeWindow.setInterval = function (a, b) {
return hookSetInterval(a, b / rate);
}
unsafeWindow.document.querySelector('video').volume = 0
unsafeWindow.document.querySelector('video').play()
var elevideo = document.querySelector("video");
elevideo.addEventListener('ended', function () { //结束
unsafeWindow.document.querySelector('video').play()
});
}
}
if (window.location.href.indexOf("https://training.tisco.com.cn/front/command/LessonAction") != -1) {
setTimeout(() => {
// Your code here...
setInterval(() => {
// 判断当前视频有没有刷完,刷完的话就会暂停,我们就通过左下角是否变成了暂停来进行判断
// let pauseIcon = document.querySelector('.pausecenterchhulqiaoaix').style.display;
let pauseIcon = document.querySelector("div[class^='pause']").style.display;
console.log(pauseIcon)
// 等于none的时候左下角为暂停,没有出现的时候就为block,出现了以后我们就跳到下一节
/*
这个网站右侧列表课程表当前播放的视频类名为cur_li,我们通过这个来判断,播放完成以后就播放它的下一个视频
*/
if (pauseIcon == 'none') {
// 直接拿到下一个视频的跳转连接
let nextHref = document.querySelector('.cur_li').nextElementSibling.children[0].href
window.location.href = nextHref;
}
}, 3000)
}, 5000)
}
if (window.location.href.indexOf("https://jiangxi.zhipeizaixian.com/study/") != -1) {
var facejgt = true;
var dtime = a_time / 5;
window.setInterval(() => {
let autonext = document.querySelector(".modal_mark___2vwrm");
let autoPlay = document.querySelector(".prism-big-play-btn");
let autoverify = document.querySelector(".ant-modal-confirm-btns");
let verifyhint = document.querySelector(".ant-modal-wrap");
let Playbutton = document.querySelector("#J_prismPlayer>video");
if (autonext != null) { setTimeout(function () { document.querySelector('.next_button___YGZWZ').click(); }, 2000); notifyhint('自动跳转', '已自动跳转下一节'); }
if (autoPlay.style.display == 'block') { document.querySelector('.outter').click(); if (a_mute) { Playbutton.volume = 0; } }
if (verifyhint != null) { if (autoverify == null) { if (facejgt) { notifyhint('人脸识别', '出来人脸识别啦!'); facejgt = false; } } }
if (autoverify != null) { setTimeout(function () { document.querySelector('.ant-btn').click(); notifyhint('弹框验证', '已经继续观看'); }, 2000); }
if (dtime <= 0) { dtime = a_time / 5; facejgt = true; } dtime--;
}, 5000);
notifyhint("启动成功", "已成功导入");
}
GM_addValueChangeListener("reload", (name, oldValue, newValue) => {
if(!flagx){
try{
ready_main()
}catch(e){
}
}
flagx=true
})
let alllearning;
let nolearning = [];
let ns_player;
let dbg = true;
// 上一页
function ns_pageback() {
history.back(-1);
}
// 获取所有课程
function ns_nostudy() {
alllearning = $(".learning-activity");
for (let i = 0; i < alllearning.length; i++) {
let str = $(".learning-activity:eq(" + i + ") div.activity-operations-container .completeness").attr("tipsy-literal");
let zf = str.match(/^<b>(\W+)<\/b>/)[1];
let type = str.match(/^<b>\W+<\/b><\/br>(\W+)/)[1];
let typeEum = -1;
if (type === "完成指标:查看页面") {
typeEum = 1;
} else if (type.indexOf("完成指标:需累积观看") > -1) {
typeEum = 2;
} else if (type.indexOf("访问线上链接") > -1) {
typeEum = 3;
} else if (type.indexOf("完成指标:参与发帖或回帖") > -1) {
typeEum = 4;
} else if (type.indexOf("完成指标:观看或下载所有参考资料附件") > -1) {
typeEum = 5;
}
if (zf !== "已完成" && typeEum != -1) {
$(".learning-activity:eq(" + i + ")>div").click();
break;
// nolearning.push({
// type: typeEum,
// id:$(".learning-activity:eq("+i+")").attr("id").replace("learning-activity-",""),
// jq:$(".learning-activity:eq("+i+")")
// })
}
}
}
function ns_back(nb) {
setTimeout(function () {
ns_pageback();
}, nb ? nb : 5000);
}
//FCQ官网以及备用
var FCQList=[
"https://tcb-w644nfbyxrttaih-2cpr71dbf4b7-1304481250.tcloudbaseapp.com/#/?orgin=greasyfork",
"https://tcb-6773aty6sx2icze-7cwy98013fe9-1304481250.tcloudbaseapp.com/#/?orgin=greasyfork",
"http://47.121.140.50/#/?orgin=greasyfork",
]
var delay = (time) => new Promise(resolve => {
setTimeout(() => {
resolve()
}, time)
})
var GM_req3 = (req_body) => {
return new Promise((resolve, reject) => {
setTimeout(()=>{
reject()
},10000)
req_body.headers={
'Accept': 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36',
}
req_body.onload=res=>{
resolve(res)
}
req_body.onerror=res=>{
reject()
}
GM_xmlhttpRequest(req_body)
})
}
var FCQIndex=GM_getValue('FCQIndex')
var FCQ=FCQList[FCQIndex||0]
var openFCQ=async ()=>{
var prefix=await Promise.race(FCQList.map(async (url,i)=>{
try{
var res=await GM_req3({url})
if((res.response||"").indexOf('<title>meteor-web</title>')!=-1){
return url
}
}catch(e){
}
await delay(10000)
return ""
}))
if(!prefix){
alert('无法打开官网,请加qq群:'+qq_group+"联系管理员处理")
}else{
window.open(prefix)
}
}
var checkIndex=async ()=>{
var FCQIndex=GM_getValue('FCQIndex')
if(FCQIndex==undefined){
var index=await Promise.race(FCQList.slice(0,2).map(async (url,i)=>{
try{
var res=await GM_req3({url:url})
if((res.response||"").indexOf('<title>meteor-web</title>')!=-1){
return i
}
}catch(e){
}
return -1
}))
if(index!=-1){
FCQIndex=index
}else{
FCQIndex=2
}
}
GM_setValue('FCQIndex',FCQIndex)
FCQ=FCQList[FCQIndex]
}
checkIndex()
var ns_pl = false;
; (function (_this) {
function opeationUi(menu) {
this.fcq_xm_answer = null;
this.$ = $;
this.menu = menu;
this.xm_window=window
this.initMenu();
this.config = {}
unsafeWindow.mainProcedure=this
window.mainProcedure=this
return this;
}
opeationUi.prototype.initData = async function () { //初始化
this.xm_ui.find("#token").val(GM_getValue("token"))
}
opeationUi.prototype.toLog = function (explain) {
setInterval(() => {
let fcq_xm_select = window.getSelection().toString();
if (fcq_xm_select) {
this.xm_ui.find('#fcq_xm_search_text')[0].value = window.getSelection().toString()
}
}, 400)
this.initData();
return this;
}
opeationUi.prototype.arrowMoveMenu = function (e) {
let elW = e.currentTarget.offsetWidth
let elH = e.currentTarget.offsetHeight
let elL = e.currentTarget.parentNode.parentNode.offsetLeft
let elT = e.currentTarget.parentNode.parentNode.offsetTop
let x = e.clientX
let y = e.clientY
let w = window.innerWidth
let h = window.innerHeight
let moveX = x - elL
let moveY = y - elT
let el = e.currentTarget
document.onmousemove = function (e) {
el.parentNode.parentNode.style.left = e.clientX - moveX + 'px'
el.parentNode.parentNode.style.top = e.clientY - moveY + 'px'
}
document.onmouseup = function (e) {
document.onmousemove = null
document.onmouseup = null
}
};
opeationUi.prototype.initMenu = function () {
let $ = this.$, menu = this.menu;
var element = $('<div id="fcq_xm_zhu"></div>')[0]
this.element=element
var shadow = element.attachShadow({ mode: 'closed' });
this.xm_ui =$('<div id="fcq_ui"></div>')
unsafeWindow.fcq_search=true
const styleTag = `
<style scoped>
.fcq_xm_container{
padding:3px;
pointer-events: visible;
position:relative;
max-height:400px;
overflow:auto;
text-align:left;
display: none;
width: 100%;
max-width: 300px;
z-index: 99999;
border-radius: 20px !important;
}
#${menu.id} p{
text-align:left;
padding-left:5px;
}
.fcq_xm_img{
border-radius: 50%;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDEgNzkuYThkNDc1MywgMjAyMy8wMy8yMy0wODo1NjozNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI1LjAgKDIwMjMwODAxLm0uMjI2NSAzYTAwNjIzKSAgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyMi0wNy0yNFQwMDoyODoxNSswODowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjMtMDgtMjJUMDE6NTE6MjYrMDg6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjMtMDgtMjJUMDE6NTE6MjYrMDg6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjkxY2Y1NWExLTZkZTEtYTk0NS1hMDk5LWY0MmNlNTQ5NGY2YiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmYyYWZkOThmLTcyMDItMzE0Ni04M2FjLTJmOGY1YTkxZDk2MiIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjgxYWIyODgwLWQxYTEtMDA0NC1iZGU3LTk5NDg4YWM0YjA2ZiI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ODFhYjI4ODAtZDFhMS0wMDQ0LWJkZTctOTk0ODhhYzRiMDZmIiBzdEV2dDp3aGVuPSIyMDIyLTA3LTI0VDAwOjI4OjE1KzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjUuMCAoMjAyMzA4MDEubS4yMjY1IDNhMDA2MjMpICAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjkxY2Y1NWExLTZkZTEtYTk0NS1hMDk5LWY0MmNlNTQ5NGY2YiIgc3RFdnQ6d2hlbj0iMjAyMy0wOC0yMlQwMTo1MToyNiswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI1LjAgKDIwMjMwODAxLm0uMjI2NSAzYTAwNjIzKSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PubJeqwAAARCSURBVDjLbVRrbBRlFD1q+kNDiESNihGDRkOiCVEMGB9ETGhMqn+wxsRgNGlNEBP0hxr1h6YGhIaSYMHW0naf3e1jW4sUSiPQatLS+ihgaal90FbazuzM7O5MZx+z232M985udyvy42R3vm/umXPvPfcCbSbgI7hVwC4ADpkQ5N9XCBWELjikOcICnNI5OJRK+l8CWzAb4yO4l4F24mCuWxBuo6ALFGRacBIa/Cbq/dlnhz8Lu3wZTYHX0LF0EyGT8YNbY8LyQtAqska/Rs//4AT9d0kFYifBrVTAkwI6iaODCZszQKtF+A4RmnlljEYmlMwDI9GNXfOJonu9sok6f+Hezu8s0keWDsBFHA4mdEcBl/5YXtXqVI8smrv6lk6ZpolkOoM3f9EO8VlBZe49FlKv70R9hAmpuE7p1/8RspIa0Twzn3hUiKYwriXRLy2vJVVpHL8pE451iYtwkDg4A1uyRaaLH0QTtTlUC+a+P8NVGVJnnzKwfyQKVuq4brx/Z41oWE2qE7Mx9lw9berbRKh8wwdF9KUNbUrftq5Q1Z4B/b2yAf3JK6EkEkTinDbw3JnQU65p427FyGDfb+H7S86pu575Kfj1+lbl9B2s0kZwCR1EKP/IqT3RGRy9pqVQP2mgZsLAYIBSJJT1LZVvPhn0ffx7uKx1Nr6uZyGBPUM63uhbwueXIhijmOLzWo9VBrs8SlaRB9Eomnc1SKp7Jr6D02LiY1PGxi2tykV8J5hHRqNlvrk4WmYMtM3GUXElYpWB3x0KJB9/0CndsEpgl0TAKw9ZcrkWxwRTiKbXC7HMQ9TNOCoXzEtq6mkO/ILU2KZimNFTFhFjXE89sNYuBTku13k/0KR0wpYzLDVjnVeR7/EqCr6dN6snY29xYCiRhpfUXaWarpDdiKQfWeOQpjkDuOSVjl/jUduftwxf8DQcnDd3XtB6ODCSzGAukoaDGnPoahSHCU3XDbzQHarCUaHgSe60K9BJKWtbrYcVT9GoFTX4kx1z8YfZf4PyMnrFZeylRrzco+LTPyLcZTzfHfrM+vhKnI1K5g7sJmMnAJs8kB+77wVz+8+q7y9K76vLEXxIRLORFA6PxVByXkXtRAweUljWr5daPsybW/ZTg8nYHTQuPn0THGLW3FTHD4b03X9Tp7+kRnwyHKHuxneU9mqvl/RquEiKx9QUPhoKb7Vm3ZZT51FL0MaT0kwD7SHY9XLYFyz3v9uvFw+TBym97ZvaAx5r45BXNzQr3ZUj0VfVRAZkozW3s4ATIte+0tqL7QQcJ7Jqgs0gYmkvf/W+FtnYfCp4dkWxRWjNt2jhxe7QyWdPB4dvs1neO0grjMhCtA8JqCOyWiak1L28hbWX0CCPo0bgPZjdJqs3C5+x72r9Ou2BUrIdbSuC71aEHrpwh3mdUQmkYiI5SugjTBAm6ayftnQdWpRSNASARiJw/5fwXxU4oNDCS+vgAAAAAElFTkSuQmCC);
background-size: 30px 30px;
width: 30px;
height: 30px;
}
.mask{
background-color: rgb(0, 0, 0);
opacity: 0.3;
position: fixed;
width: 100%;
height: 100%;
top: 0px;
left: 0px;
display: flex;
justify-content: center;
align-items: center;
z-index: 2147483608;
}
.box{
margin: 0;
padding: 10px;
background-color: #fff;
-webkit-background-clip: content;
border-radius: 2px;
box-shadow: 1px 1px 50px rgba(0,0,0,.3);
}
.xm_t{
position: fixed;
width: 100%;
height: 100%;
top: 0px;
left: 0px;
display: flex;
justify-content: center;
align-items: center;
z-index: 2147483609;
}
</style>`;
$(styleTag).appendTo(this.xm_ui);
let $menu = $(
`
<div id='${menu.id}' style=" font-size:14px;
z-index: 10000000;
text-align:center;
position:fixed;
background: rgb(240, 249, 235);
box-shadow: 0 5px 15px rgba(0,0,0,0.8);
border-radius: 10px;
left:`+menu.pos.x+`px;
top:`+menu.pos.y+`px;
">
<div id ="fcq_zhu" style="pointer-events: visible;">
<div id="fcq_xm_set" style="
font: unset;
z-index: 2147483607;
color: #67c23a;
padding: 5px;
display: flex;
line-height: 1;
cursor: pointer;
font-size: 25px;
width: unset;
justify-content: center;
align-items: center;
">
<div class="fcq_xm_img"></div>
<div>FCQ网课助手</div>
</div>
</div>
<div class= "fcq_xm_container" id="fcq_xm_set_2">
<div style="display: flex;">
<div style="width: 45px;"> token:</div><input id = "token" style="
width: 170px;
border: none;
border-radius: 5px;
border: 2px solid #ccc;
font-size: 10px;
outline: none;
transition: all 0.3s ease-in-out;
"/>
<a target='_blank' id="fcq_web" href='`+FCQ+`' style="
font:unset;
width: 70px;
text-align: center;
display: inline-block;
background: linear-gradient(to bottom, #4eb5e5 0%,#389ed5 100%);
border: none;
border-radius: 5px;
position: relative;
border-bottom: 4px solid #2b8bc6;
color: #fbfbfb;
font-weight: 600;
font-family: 'Open Sans', sans-serif;
text-shadow: 1px 1px 1px rgba(0,0,0,.4);
font-size: 10px;
text-indent: 5px;
box-shadow: 0px 3px 0px 0px rgba(0,0,0,.2);
cursor: pointer;
padding: 5px 8px 3px 2px;
">获取(官网)</a>
</div>
<div style="display: flex;">
<div style="width: 45px;">题目 :</div><input id = "fcq_xm_search_text" placeholder="" style="width: 170px;
border: none;
border-radius: 5px;
border: 2px solid #ccc;
font-size: 10px;
outline: none;
transition: all 0.3s ease-in-out;
" />
<button id="fcq_xm_search" style="
font:unset;
display: inline-block;
background: linear-gradient(to bottom, #4eb5e5 0%,#389ed5 100%);
border: none;
border-radius: 5px;
position: relative;
border-bottom: 4px solid #2b8bc6;
color: #fbfbfb;
font-weight: 600;
font-family: 'Open Sans', sans-serif;
text-shadow: 1px 1px 1px rgba(0,0,0,.4);
font-size: 10px;
text-align: left;
text-indent: 5px;
box-shadow: 0px 3px 0px 0px rgba(0,0,0,.2);
cursor: pointer;
padding: 5px 8px 3px 2px;
width: 80px;
text-align: center;
">开始做题</button>
</div>
<div>
使用前请先获取登录token后填入,选中文字点击搜索即可,更多功能请前往官网查阅,<span style="color:blue">图标可拖动</span>
</div>
</div>
<div class= "fcq_xm_container" id="fcq_xm_answer">
<p>
</p>
</div>
</div>`);
var mask=$(`
<div class="mask_box" style="display:none;">
<div class="mask">
</div>
<div class="xm_t">
<div class="box" style="
width: 400px;
background: white;
">
<div class="top" style="
width: 100%;
padding-bottom: 10px;
text-align: right;
border-bottom: 1px solid #f0f0f0;
">
<div id="xm_close" style="font-size: 15px;">关闭</div>
</div>
<div class="xm_content_trip" style="
font-size: 15px;
padding: 10px;
">
</div>
<div class="bottom" style="
width: 100%;
display: flex;
justify-content: flex-end;
width: 100%;
">
<div style="height: 28px;
border-color: #1e9fff;
background-color: #1e9fff;
color: #fff;
line-height: 28px;
padding: 0 15px;
border: 1px solid #dedede;
border-radius: 2px;
font-weight: 400;
cursor: pointer;
text-decoration: none;
font-size: 15px;
" id="xm_confirm">确认</div>
</div>
</div>
</div>
`)
shadow.appendChild(this.xm_ui[0])
this.xm_ui[0].appendChild($menu[0])
this.xm_ui[0].appendChild(mask[0])
//console.log('页面')
$(document).ready(()=>{
$('html').append(element)
setInterval(()=>{
if(!$('html').find(element).length){
$('html').append(element)
}
},1000)
})
this.fcq_xm_answer = this.xm_ui.find('#fcq_xm_answer');
this.xm_ui.find('#fcq_xm_set').on('mousedown',(e)=>{
window.mainProcedure.arrowMoveMenu(e);//.target.parentNode.id
})
var click_set= ()=> {
this.xm_ui.find("#fcq_xm_set_2").toggle('active');
this.xm_ui.find("#fcq_xm_answer").hide("slow");
}
this.xm_ui.find('#fcq_xm_set').on('click',click_set)
this.xm_ui.find('#token').on('input',()=>{
console.log('修改',this.xm_ui.find('#token').val())
GM_setValue("token", this.xm_ui.find('#token').val())
})
this.xm_ui.find('#fcq_xm_search').on('click',async ()=>{
let fcq_xm_answer = this.xm_ui.find("#fcq_xm_answer")
let text = this.xm_ui.find("#fcq_xm_search_text")[0]
fcq_xm_answer.show("slow");
fcq_xm_answer.text("");
if (text.value.length < 6&&0) {
fcq_xm_answer.append("搜索题目需要6个字符以上");
return;
}
fcq_xm_answer.append("正在搜索题库中,若长时间未返回信息,请加群"+qq_group+"反馈,注:该接口极易遭受攻击,如果无法正常使用,推荐使用官网内第二个,或耐心等待修复即可<hr>");
await window.mainProcedure.search(text.value.replace(/ /g, " "))
fcq_xm_answer.text("");
fcq_xm_answer.append("搜索到" + window.mainProcedure.config.answer.rows.length + "条相关题目<hr>");
window.mainProcedure.config.answer.rows.forEach(row => {
fcq_xm_answer.append("题目:" + row.subject + "<br>" + "答案:");
row.answers.forEach(answer => {
fcq_xm_answer.append(answer + " ");
});
fcq_xm_answer.append("<hr>");
});
})
}
opeationUi.prototype.tanchu = function (text,fn){
if(window.load_zhushou_state||window.fcq_state){
return
}
this.xm_ui.find('.mask_box').css('display','block')
this.xm_ui.find('.xm_content_trip').html(text)
var end=()=>{
this.xm_ui.find('.mask_box').css('display','none')
this.xm_ui.find('#xm_close')[0].removeEventListener('click', cancelClick)
this.xm_ui.find('#xm_confirm')[0].removeEventListener('click', confirmClick)
}
var confirmClick=()=>{
if(fn){
fn(true)
GM_setValue('userFirst',true)
}
end()
}
var cancelClick=()=>{
if(fn){
fn(!GM_setValue('userFirst'))
GM_setValue('userFirst',true)
}
end()
}
this.xm_ui.find('#xm_confirm')[0].addEventListener('click', confirmClick)
this.xm_ui.find('#xm_close')[0].addEventListener('click', cancelClick)
}
opeationUi.prototype.search = function (text){
return new Promise(resolve => {
let obj = {
"action": "search",
"search": text,
"token": GM_getValue("token") || ""
};
console.log('开始',obj)
this.xm_ui.find('#token').val(GM_getValue("token"))
var xm_answer=this.xm_ui.find("#fcq_xm_answer")
GM_xmlhttpRequest({
timeout: 10000,
method: "POST",
url: "https://fc-mp-1420928c-320a-4dca-a246-45b4e1ddf142.next.bspapp.com/api",
data: JSON.stringify(obj),
onload: response=> {
var data = JSON.parse(response.response)
console.log('返回结果',data)
window.mainProcedure.config.answer = {}
if (data.list) {
window.mainProcedure.config.answer.rows = data.list.map(c => {
return {
subject: c.title,
answers: c.answer
}
})
resolve()
} else {
if(data.msg){
this.tanchu(data.msg)
}else{
this.tanchu('FCQ服务器出错,可能被人恶意攻击了,请耐心等待修复或者点击确认查看官网更多版本',(clickState)=>{
if(clickState){
openFCQ()
}
},{
btn:['确认']
})
}
}
},
onerror: function (err) {
console.log('error')
xm_answer.append("发生异常:" + err);
},
ontimeout: function (inf) {
console.log('请求超时')
xm_answer.append("请求超时:" + inf);
}
})
})
}
opeationUi.prototype.start = function (reslist) {
return this.api.start_search()
}
_this.opeationUi = opeationUi;
})(window);
var fingerprintLog=(key)=>{
if(typeof Fingerprint2!='undefined'&&window === window.parent){
if(!GM_getValue('fingerprintLog')||GM_getValue('fingerprintLog')[key]!=0){
Fingerprint2.get(components => {
const values = components.map(function (component, index) {
if (index === 0) {
return component.value.replace(/\bNetType\/\w+\b/, "")
}
return component.value
})
const murmur = Fingerprint2.x64hash128(values.join(''), 31);
var data=GM_getValue('fingerprintLog')||{
fingerprint:murmur,
plugin:{
scriptHandler:GM_info.scriptHandler,
scriptVersion:GM_info.version,
name:GM_info.script.name,
version:GM_info.script.version
},
userAgent:navigator.userAgent
}
if(key){
data[key]=0
}
GM_xmlhttpRequest({
timeout: 10000,
method: "POST",
url: "http://121.4.44.3:6397/fingerprint",
headers: {
"Content-type": "application/json;charset=UTF-8"
},
data: JSON.stringify(data),
onload: response=> {
GM_setValue('fingerprintLog',data)
}
})
});
}
}
}
if (window.location == window.parent.location||window.location.host.indexOf('tcloudbaseapp.com')!=-1) { // 判断是否为ifarm
new window.opeationUi({
id: "niu",
width: 80,
background: '#fff',
opacity: 0.8,
pos: {
x: 50,
y: 300
}
}).toLog('0');
if(!GM_getValue("fcq_xm_init")){
window.mainProcedure.xm_ui.find("#fcq_xm_set_2").toggle('active');
window.mainProcedure.xm_ui.find("#fcq_xm_answer").hide("slow");
GM_setValue("fcq_xm_init",true)
}
var userFirst=GM_getValue('userFirst')
if(!GM_getValue('userFirst')){
fingerprintLog('step')
}
setTimeout(()=>{
if(!(userFirst&&!GM_getValue('token')&&!unsafeWindow.load_zhushou_state)&&window.location.host.indexOf('tcloudbaseapp.com')==-1&&!unsafeWindow.fcq_state){
window.mainProcedure.tanchu('FCQ网课助手提示:首次使用脚本需要填写token,点击确定前往获取',(clickState)=>{
if(clickState){
openFCQ()
}
},{
btn:['确认']
})
}
if(!unsafeWindow.fcq_state&&window.location == window.parent.location){
$('html').append(`<iframe style="display:none;left: 0px;" src="`+FCQ+`"></iframe>`)
}
},2000)
}
// 判断url是在课程首页
if (/https:\/\/lms.ouchn.cn\/course\/\d+\/ng#\//m.test(document.URL)) {
nsd("当前在课程首页");
// 判断全部展开按钮
let cai = $(".expand-collapse-all-button>i");
if (cai.hasClass("font-toggle-all-collapsed")) {
nsd("点击全部展开");
cai.click();
}
// 加载所有课程
setInterval(function () {
nsd("获取所有课程");
ns_nostudy();
}, 5000);
} else if (/https:\/\/lms.ouchn.cn\/course\/\d+\/learning-activity\/full-screen#\/\d+/m.test(document.URL)) {
nsd("在详情页");
// 处理详情
setTimeout(function () {
// 2秒监控一次
setInterval(function () {
ns_player = $(".vjs-tech")[0];
if (ns_player) {
nsd("页面有视频")
ns_playover();
ns_start();
} else {
nsd("页面没视频")
ns_todown();
}
}, 5000);
}, 15000);
}
try{
Mustache.render_partial(gV())
}catch(e){
// console.log('报错',e)
}
function ns_todown() {
if ($(".open-link-button").html() && $(".open-link-button").html().indexOf("新页签打开") > -1) {
nsd("处理点击链接")
$(".open-link-button>i").click();
ns_back();
} else if ($(".embeded-new-topic").html() && $(".embeded-new-topic").html().indexOf("发表帖子") > -1 && !ns_pl) {
nsd("处理发表帖子")
$(".embeded-new-topic>i").click();
$("#add-topic-popup > div > div.topic-form-section.main-area > form > div:nth-child(1) > div.field > input").val("好好学习").trigger('change');
setTimeout(function () {
$("#add-topic-popup > div > div.popup-footer > div > button.button.button-green.medium").click();
ns_pl = true;
ns_back(10000);
}, 1000);
} else if ($("div.attachment-column.column.large-3 a:eq(0)")[0]) {
nsd("处理文件预览")
$("div.attachment-column.column.large-3 a:eq(0)").click();
ns_back();
} else {
nsd("处理其他")
$(".___content").scrollTop(999999);
$(document.getElementById("previewContentInIframe").contentWindow.document).scrollTop(999999);
ns_back();
}
}
/**
* 点击所有li
*/
function ns_allclick() {
let ali = $(".module-list>ul>li>div");
for (let index = 0; index < ali.length; index++) {
const element = ali[index];
$(element).click();
}
}
/**
* 播放方法
*/
function ns_play() {
ns_player.playbackRate = 16;
ns_player.muted = true;
$("div.mvp-replay-player-all-controls > div.mvp-controls-left-area > button > i").click();
}
/**
* 判断是否暂停,如果暂停,就调用播放方法
*/
function ns_start() {
if (ns_player.paused && ns_player.duration !== ns_player.currentTime) {
ns_play();
}
}
/**
* 如果播放完毕,调用播放下一个视频的方法
*/
function ns_playover() {
if (ns_player.duration === ns_player.currentTime) {
ns_back();
}
}
/**
* 播放下一个视频,如果有弹窗,那就播放当前视频
*/
function ns_playnext() {
let actlist = $(".activity-list>li");
let flag = false;
for (let i = 0; i < actlist.length; i++) {
if (flag) {
if ($($(".activity-list>li")[i]).parent().parent().find("> div > div > span").text() != "视频学习") {
continue;
}
$(".activity-list>li:eq(" + i + ")>div").click();
let popup = $(".prerequisites-confirmation-popup");
for (let j = 0; j < popup.length; j++) {
if (popup[j].style.display === "block") {
$(".prerequisites-confirmation-popup:eq(" + j + ") .form-buttons>button").click();
ns_play();
break;
}
}
break;
}
if ($(actlist[i]).hasClass("active")) {
flag = true;
}
}
}
function nsd(str) {
if (dbg) {
console.log(str);
}
}
var startTime = 5000; //刷课间隔时间 //若超过该时间页面还未加载则自动跳过
var IntervalTime = 2000;//监测时长
var Video_muted = true; //开启静音
var Video_speed = 4; //倍速设置 最大16
(function () {
'use strict';
const urls = { 'course': 'https://www.zjooc.cn/ucenter/student/course/study/[A-Za-z0-9]+/plan/detail/[A-Za-z0-9]+' };
var ListStudy_main = [];
var ListStudy_view = [];
var ListStudy_main_now;
var ListStudy_view_now;
var Interval;
var LN = 0;
var MN = 0;
var url = unsafeWindow.location.href;
var href = new RegExp(urls.course);
CONSOLE();
LOG(href.test(url));
if (href.test(url)) {
unsafeWindow.setTimeout(function () {
LOG("=========== 开始执行脚本 =========");
for (var i = 0; i < document.querySelectorAll('.el-submenu__title').length; i++) { if (i > 0) document.querySelectorAll('.el-submenu__title')[i].click() }
GET_MAIN_LIST();
LOG("------------");
GET_VIEW_LIST();
LOG("------------");
//LOG(ListStudy_main);
//LOG(ListStudy_view);
if (ListStudy_main == "") {
LOG("全部完成");
} else {
ListStudy_main_now.click();
if (ListStudy_view == "") {
LOG("当前小节已完成");
NEXT_MAIN();
} else {
ListStudy_view_now.click();
unsafeWindow.setTimeout(AUTO_COURSE, startTime);
}
}
}, startTime);
}
function AUTO_COURSE() {
if (Interval) {
unsafeWindow.clearInterval(Interval);
}
LOG("============= 开始刷课 ===========");
LOG("当前课时:" + ListStudy_view_now.innerText);
if (document.querySelector('iframe')) {
LOG("类型【文档】");
var document_ok = document.querySelector('.contain-bottom').querySelectorAll('button.el-button.el-button--default');
LOG("文档按钮" + document_ok);
if (document_ok) {
for (var i = 0; i < document_ok.length; i++) document_ok[i].click();
LOG("正在执行文档程序");
}
LOG("============= 结束刷课 ===========");
NEXT_VIEW();
} else {
LOG("类型【视频】");
var video = document.querySelector('video');
LOG("[寻找VIDEO]" + video);
if (video) {
video.autoplay = "autoplay";
video.muted = Video_muted;
video.playbackRate = Video_speed;
var p = document.querySelector('video');
if (p) p.click();
Interval = unsafeWindow.setInterval(VIDEO_OK, IntervalTime);
}
}
}
function VIDEO_OK() {
try {
var video = document.querySelector('video');
var bar = video.parentNode.children[2];
var processBar = bar.children[7];
var times = processBar.innerText.split('/');
var now = times[0].trim();
var end = times[1].trim();
LOG(times);
if (now == end) {
if (Interval) {
unsafeWindow.clearInterval(Interval);
}
LOG("============= 结束刷课 ===========");
unsafeWindow.setTimeout(NEXT_VIEW, startTime);
}
} catch (err) {
LOG("[ERROR] " + err);
if (Interval) {
unsafeWindow.clearInterval(Interval);
}
unsafeWindow.setTimeout(NEXT_VIEW, startTime);
}
}
function NEXT_MAIN() {
MN += 1;
if (MN >= ListStudy_main.length) {
LOG("全部完成");
alert("🎉 本课程学习完毕");
} else {
ListStudy_main_now = ListStudy_main[MN];
ListStudy_main_now.click();
LOG("正在切换下一章节");
unsafeWindow.setTimeout(function () {
GET_VIEW_LIST();
if (ListStudy_view == "") {
LOG("当前小节已完成");
NEXT_MAIN();
} else {
ListStudy_view_now.click();
unsafeWindow.setTimeout(function () { AUTO_COURSE() }, startTime);
}
}, startTime);
}
}
function NEXT_VIEW() {
LN += 1;
if (LN >= ListStudy_view.length) {
LOG("当前小节已完成");
NEXT_MAIN();
} else {
ListStudy_view_now = ListStudy_view[LN];
ListStudy_view_now.click();
//LOG("当前课时:"+ListStudy_view_now.innerText);
//LOG("下一课时:"+ListStudy_view_now.nextSibling.innerText);
unsafeWindow.setTimeout(AUTO_COURSE, startTime);
}
}
function GET_MAIN_LIST() {
ListStudy_main = [];
MN = 0;
LOG("[学习章节]");
LOG("-------------");
//get main list
var main_list = document.querySelector('.base-asider ul[role="menubar"]');
for (var a = 0; a < main_list.childElementCount; a++) {
var sec_list = main_list.children[a].children[1];
for (var b = 0; b < sec_list.childElementCount; b++) {
var _e = sec_list.children[b];
//if(_e.getAttribute('tabindex')=='0')//-1 unfinish 0 finish
//{
// LOG("finished");
//}else{
LOG(_e.innerText);
ListStudy_main.push(_e);
//}
}
}
//end
ListStudy_main_now = ListStudy_main[0];
ListStudy_main_now.click();
LOG("-------------");
}
function GET_VIEW_LIST() {
ListStudy_view = [];
LN = 0;
LOG("[学习小节]");
LOG("-------------");
var list = document.querySelector('.plan-detailvideo div[role="tablist"]');
for (var i = 0; i < list.childElementCount; i++) {
var e = list.children[i];
if (e.querySelector('i').classList.contains('complete'))//finished
{
LOG("finished");
} else {
LOG(e.innerText);
ListStudy_view.push(e);
}
}
ListStudy_view_now = ListStudy_view[0];
LOG("-------------");
}
function LOG(info) {
$('#console').append('<div class="" style="marginLeft:10px;"><span id="">' + info + '</span></div>');
$('#console').scrollTop(10000000);
}
function CONSOLE() {
unsafeWindow.onload = function () {
return;
var box = '<div class="CONSOLE" style="border: 2px dashed rgb(0, 85, 68);width: 330px; position: fixed; top: 0; right: 0; z-index: 99999;background-color: #e8e8e8; overflow-x: auto;"><button id="close_console">隐藏控制台</button><div class="console_box" id="console" style="height:360px;background:#fff;margin:10px auto 0;overflow:auto;"><div class="info"><div class="time"></div></div></div></div>';
$('body').append(box);
document.getElementById("close_console").onclick = function () {
var b = document.getElementById("console");
if (document.getElementById("close_console").innerText == '隐藏控制台') {
b.style.display = "none";
document.getElementById("close_console").innerText = "显示控制台";
}
else {
b.style.display = "";
document.getElementById("close_console").innerText = "隐藏控制台";
}
}
}
}
})();
function show_homework_answer(str) {
var ua = navigator.userAgent;
var opacity = '0.95';
if (ua.indexOf("Edge") >= 0) {
opacity = '0.6';
} else {
opacity = '0.95';
}
var copyTextBox = '<div id="copy-text-box" style="width:100%;height:100%;position: fixed;z-index: 9999;display: block;top: 0px;left: 0px;background:rgba(255,255,255,' + opacity + ');-webkit-backdrop-filter: blur(20px);display: flex;justify-content:center;align-items:center;">' +
'<div id="copy-text-box-close" style="width:100%;height:100%;position:fixed;top:0px;left:0px;"></div>' +
'<pre id="copy-text-content" style="width:60%;font-size:16px;line-height:22px;z-index:10000;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;word-break:break-all;max-height:70%;overflow:auto;"></pre>' +
'</div>"';
$('#copy-text-box').remove();
$('body').append(copyTextBox);
$('#copy-text-content').html(str);
$('#copy-text-box-close').click(function () {
$('#copy-text-box').remove();
});
}
function get_spoc_homework_answer(id) {
if (id) {
var post_data = `callCount=1
scriptSessionId=\${scriptSessionId}190
c0-scriptName=MocQuizBean
c0-methodName=getHomeworkPaperDto
c0-id=0
c0-param0=number:PARAM_ID
c0-param1=null:null
c0-param2=boolean:false
c0-param3=number:1
c0-param4=number:0
batchId=0`
post_data = post_data.replace("PARAM_ID", id)
console.log(post_data)
//post start
GM_xmlhttpRequest({
method: "POST",
data: post_data,
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
url: "https://www.icourse163.org/dwr/call/plaincall/MocQuizBean.getHomeworkPaperDto.dwr",
onload: function (response) {
//console.log(response.responseText)
//console.log(s2)
var answer_str = ""
for (var i = 0; i < s2.length; i++) {
var judgeDtos = s2[i].judgeDtos
for (var j = 0; j < judgeDtos.length; j++) {
console.log(judgeDtos[j].msg)
answer_str += "<p>" + String(i + 1) + ":" + judgeDtos[j].msg + "</p>"
}
}
show_homework_answer(answer_str)
}
});
//post end
}
}
function get_answer(aid, id) {
if (aid && id) {
var post_data = "callCount=1\n"
post_data += "scriptSessionId=${scriptSessionId}190\n"
post_data += "httpSessionId=1d4ae12c733f41f495fc1fcbaeccd4f2\n"
post_data += "c0-scriptName=MocQuizBean\n"
post_data += "c0-methodName=getQuizPaperDto\n"
post_data += "c0-id=0\n"
post_data += "c0-param0=string:" + id + "\n"
post_data += "c0-param1=number:" + aid + "\n"
post_data += "c0-param2=boolean:true\n"
post_data += "batchId=0"
GM_xmlhttpRequest({
method: "POST",
data: post_data,
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
url: "https://www.icourse163.org/dwr/call/plaincall/MocQuizBean.getQuizPaperDto.dwr",
onload: function (response) {
var qlist = document.getElementsByClassName("j-list")[0].children[0].children
//s1 is question list
//var qnum=qlist.childElementCount
for (var i = 0; i < s1.length; i++) {
var answer = "";
var analyse = "";
if (s1[i].stdAnswer) {
answer = s1[i].stdAnswer;
} else {
for (var j = 0; j < s1[i].optionDtos.length; j++) {
var choice = s1[i].optionDtos[j]
if (choice.answer) {
answer += "ABCD"[j]//+":"
//answer+=choice.content+"\n"
}
if (choice.analyse) {
analyse += choice.analyse
}
}
}
if (s1[i].analyse) {
analyse += s1[i].analyse
}
console.log(answer)
console.log(analyse)
answer = answer.replace("##%_YZPRLFH_%##", "或")
var raw_html = `<div class="analysisInfo ">
<div>
<span class="f-f0 tt1">正确答案:
</span>
<span class="f-f0 tt2">ANSWER
</span>
</div>
<div>
<b>解析:ANALYSE
</div>
</div>`
var $node = $(qlist[i])
raw_html = raw_html.replace("ANSWER", answer)
raw_html = raw_html.replace("ANALYSE", analyse ? analyse : "无")
$node.append(raw_html)
}
}
});
}
}
function main() {
var aid = 0;
var id = 0;
if (aid && id) {
var topBox = "<div style='position:fixed;z-index:999999;background-color:#ccc;cursor:pointer;top:200px;left:0px;'>" +
"<div id='pre_analysis' style='font-size:13px;padding:10px 2px;color:#FFF;background-color:#25AE84;'>提前解析</div>" +
"</div>";
$("body").append(topBox);
$("body").on("click", "#pre_analysis", function () {
get_answer(aid, id);
});
} else {
var hash = document.location.hash;
if (hash.indexOf("/learn/hw?id=") > 0) {
//parse hash
var homework_Box = "<div style='position:fixed;z-index:999999;background-color:#ccc;cursor:pointer;top:200px;left:0px;'>" +
"<div id='get_homework_answer' style='font-size:13px;padding:10px 2px;color:#FFF;background-color:#25AE84;'>获取作业答案</div>" +
"</div>";
$("body").append(homework_Box);
$("body").on("click", "#get_homework_answer", function () {
get_spoc_homework_answer(id)
});
}
}
};
var wait_time = 6;
function enableStartExam() {
var btn_exam = $("#jrks");
showExam(true);
var p = $("<p> </p>");
p.appendTo(btn_exam);
setTimeout(() => {
p.trigger('click');
}, wait_time);
}
function sleep(time, unit) {
if (time == null) { time = wait_time * 1000; }
if (unit != null) { time = time * 1000; }
for (var t = Date.now(); Date.now() - t <= time;);
}
var fuc = setInterval(function () {
//晚点再写
}, wait_time * 1000);
// xm_window.GM_info
if (window.location.href.indexOf("onlineenew.enetedu.com") != -1) {
function randomNum(minNum, maxNum) {
switch (arguments.length) {
case 1:
return parseInt(Math.random() * minNum + 1, 10);
break;
case 2:
return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
break;
default:
return 0;
break;
}
}
window.onload=function(){
let pppplay = setInterval(function(){
if($(".classcenter-chapter1 iframe").contents().find(".layui-layer-content iframe").length > 0){
setTimeout(function(){
$(".classcenter-chapter1 iframe").contents().find(".layui-layer-content iframe").contents().find("#questionid~div button").trigger("click")
}, randomNum(15, 40) * 100);
} else {
$(".classcenter-chapter1 iframe").contents().find("video").trigger("play")
}
console.log(new Date().getTime(), $(".classcenter-chapter1 iframe").length, $(".classcenter-chapter1 iframe").contents().find(".layui-layer-content iframe").length)
},5000);
setTimeout(function(){
$(".classcenter-chapter1 iframe").contents().find("video").on("timeupdate",function(){
if(Math.ceil(this.currentTime) >= Math.ceil(this.duration)) {
//clearInterval(pppplay);
let flag = false;
$(".classcenter-chapter2 ul li").each(function(t){
console.log($(this).css("background-color") == "rgb(204, 197, 197)")
if ($(this).css("background-color") != "rgb(204, 197, 197)") {
if ($(this).find("span").text() != "[100%]") {
flag = true;
$(this).trigger("click");
return false;
}
}
});
if(!flag) {
clearInterval(pppplay);
}
}
})
},8000);
}
}
if (window.location.href.indexOf("qingshunxuetang.com") != -1) {
let domain = 'https://degree.qingshuxuetang.com/'
let url=location.href;
if (url.indexOf('Course/CourseList') > -1) {
setTimeout(function() {
console.log('currentCourse',currentCourse)
sessionStorage.setItem('courses',JSON.stringify(currentCourse))
let course = currentCourse[0];
window.location.href=`${domain}cgjy/Student/Course/CourseStudy?courseId=${course.courseId}&teachPlanId=${course.teachPlanId}&periodId=${course.periodId}`
}, 3000)
}else if(url.indexOf('Course/CourseStudy') > -1){
setTimeout(function() {
console.log('coursewareMedias',coursewareMedias)
var videos=[];
getVideoNode(coursewareMedias,videos)
console.log('videos',videos);
let video = videos[0];
let courseId = getQueryString('courseId');
let teachPlanId = getQueryString('teachPlanId');
let periodId = getQueryString('periodId');
let videoMaps = {}
videoMaps[courseId] = videos;
sessionStorage.setItem('videos',JSON.stringify(videoMaps))
window.location.href=`https://degree.qingshuxuetang.com/cgjy/Student/Course/CourseShow?teachPlanId=${teachPlanId}&periodId=${periodId}&courseId=${courseId}&nodeId=${video.id}`
}, 3000)
}else if(url.indexOf('Course/CourseShow') > -1){
let courseId = getQueryString('courseId');
let nodeId = getQueryString('nodeId');
let videoMaps = JSON.parse(sessionStorage.getItem('videos'))
let teachPlanId = getQueryString('teachPlanId');
let periodId = getQueryString('periodId');
let nextVideo = getNextVideo(nodeId,videoMaps[courseId])
setTimeout(function() {
var video = document.getElementsByTagName("video")[0]
//设置静音
video.muted = true
//视频倍速
video.playbackRate = 2
//视频开始
video.play()
const nextUrl = `https://degree.qingshuxuetang.com/cgjy/Student/Course/CourseShow?teachPlanId=${teachPlanId}&periodId=${periodId}&courseId=${courseId}&nodeId=${nextVideo}`
// 下一条视频
video.addEventListener("ended",function(){
if(nextVideo == null){
let courses = JSON.parse(sessionStorage.getItem('courses'))
let course = getNextCourse(courseId,courses)
if(course == null){
window.location.href='https://baidu.com'
}
window.location.href=`${domain}cgjy/Student/Course/CourseStudy?courseId=${course.courseId}&teachPlanId=${course.teachPlanId}&periodId=${course.periodId}`
}else{
location.replace(nextUrl);
}
})
}, 5000)
getVideoTime()
}
function getNextVideo(current,videos){
let next =null;
Array.prototype.forEach.call(videos,function (value,index) {
if(value.id === current && videos.length-1 > index+1){
next = videos[index+1].id
return false
}
})
return next;
}
function getNextCourse(current,courses){
let next =null;
Array.prototype.forEach.call(courses,function (value,index) {
if(value.courseId == current && courses.length-1 > index+1){
next = courses[index+1]
return false
}
})
return next;
}
function getVideoNode(medias,videos){
Array.prototype.forEach.call(medias,function (value,index) {
if(value.type === 'video'){
videos.push(value)
}
if(value.nodes !=null){
getVideoNode(value.nodes,videos)
}
})
}
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null) {
return unescape(r[2]);
}
return null;
}
let currentVideoTime =null;
function getVideoTime() {
setInterval(function () {
var vid = document.getElementsByTagName("video")[0]
var currentTime = vid.currentTime.toFixed(1);
if(currentTime == currentVideoTime){
console.log('视频卡住了,刷新~');
location.reload()
}
currentVideoTime = currentTime;
console.log('视频时间:', currentTime);
}, 5000);
}
}
if (window.location.href.indexOf("172.20.32.191/redir.php?catalog_id=6&cmd=dati") != -1) {
var host = window.location.host;
if (host != "10.66.100.207" && host != "172.26.0.150") {
var questions = document.getElementsByClassName("shiti");
var _question, question, index, answer;
var notfounds = new Array(), dislocations = new Array();
var notfound = 0, dislocation = 0;
for (let i = 0, __qlength__ = questions.length; i < __qlength__; ++i) {
_question = questions[i].children[0].textContent.split("\u3001");
index = _question.shift();
question = _question.join("\u3001").replace(/[^0-9A-Za-z\u4e00-\u9fff]/g, "").replace(/^(\u5224\u65ad|\u5355\u9009|\u591a\u9009)\u9898/, "");
answer = findAnswer(question);
var _text, _c, c, answers;
var answered = false;
if (answer != "") {
answers = answer.split("\u000a");
for (let choice = 0, __clength__ = questions[i].children[1].childElementCount; choice < __clength__; ++choice) {
var ipt = document.getElementById("ti_" + index + "_" + String(choice));
_text = ipt.parentNode.children[1].textContent.replace(/[\s\?]/g, "");
if (_text.length == 0) {
dislocations[dislocation++] = String(index);
questions[i].children[0].setAttribute("style", "color: red");
} else {
_c = _text.replace(/\./, "\u3001").replace(/\uff0e/, "\u3001").split("\u3001");
if (_c.length > 1) {
_c.shift();
}
c = _c.join("\u3001");
c = c.replace("\u6b63\u786e", "\u5bf9").replace("\u9519\u8bef", "\u9519");
for (let ai = 0, __alength__ = answers.length; ai < __alength__; ++ai) {
if (answers[ai] == c) {
ipt.click();
answered = true;
break;
}
}
}
}
if (!answered) {
notfounds[notfound++] = String(index);
questions[i].children[0].setAttribute("style", "color: red");
}
} else {
notfounds[notfound++] = String(index);
questions[i].children[0].setAttribute("style", "color: red");
}
}
if (notfound > 0 || dislocation > 0) {
if (notfound > 0) {
alert("\u6b64\u9875\u9762\u5171\u6709" + String(notfound) + "\u9053\u9898\u672a\u80fd\u81ea\u52a8\u586b\u5145\uff1a" + notfounds.join("\u3001"));
}
if (dislocation > 0) {
alert("\u6b64\u9875\u9762\u5171\u6709" + String(dislocation) + "\u9053\u9898\u7531\u4e8e\u9009\u9879\u9519\u4f4d\uff0c\u5df2\u9009\u62e9\u6b63\u786e\u4f46\u4e0d\u5f97\u5206\u9009\u9879\uff1a" + dislocations.join("\u3001"));
}
} else {
var next = document.getElementsByClassName("nav")[0].children[0];
if (next && next.value == "\u4e0b\u4e00\u9875") {
next.click();
} else {
document.getElementsByClassName("nav")[0].children[1].click();
}
}
} else {
let Qs = new Array();
let __QsLen__ = 0;
if (document.getElementById("DataGridA")) {
for (let i = 0, __Q__ = document.getElementById("DataGridA").children[0], __QLen__ = __Q__.childElementCount; i < __QLen__; ++i) {
Qs[__QsLen__++] = __Q__.children[i];
}
}
if (document.getElementById("DataGridB")) {
for (let i = 0, __Q__ = document.getElementById("DataGridB").children[0], __QLen__ = __Q__.childElementCount; i < __QLen__; ++i) {
Qs[__QsLen__++] = __Q__.children[i];
}
}
if (document.getElementById("DataGridC")) {
for (let i = 0, __Q__ = document.getElementById("DataGridC").children[0], __QLen__ = __Q__.childElementCount; i < __QLen__; ++i) {
Qs[__QsLen__++] = __Q__.children[i];
}
}
let notfounds = new Array();
let notfound = 0;
for (let i = 0; i < __QsLen__; ++i) {
let t = Qs[i].children[0].children[0].children[0];
let _Q = t.children[0].children[0].children[0].textContent.split("\u3001");
let index = _Q.shift();
let Q = _Q.join("\u3001").replace(/[^0-9A-Za-z\u4e00-\u9fff]/g, "");
let A = findAnswer(Q);
let As = A.split("\u000a");
let Cs = t.children[1].children[0].children[0].children[0].children[0];
let answered = false;
for (let j = 0, __CsLen__ = Cs.childElementCount; j < __CsLen__; ++j) {
let _C = Cs.children[j].children[1].textContent.replace(/\./, "\u3001").replace(/\uff0e/, "\u3001").split("\u3001");
if (_C.length > 1) {
_C.shift();
}
let C = _C.join("\u3001");
C = C.replace("\u6b63\u786e", "\u5bf9").replace("\u9519\u8bef", "\u9519");
for (let k = 0, __AsLen__ = As.length; k < __AsLen__; ++k) {
if (C == As[k]) {
Cs.children[j].children[0].click();
answered = true;
break;
}
}
}
if (!answered) {
notfounds[notfound++] = String(index);
t.children[0].children[0].children[0].setAttribute("style", "color: red");
}
}
if (notfound > 0) {
alert("\u6b64\u9875\u9762\u5171\u6709" + String(notfound) + "\u9053\u9898\u672a\u80fd\u81ea\u52a8\u586b\u5145\uff1a" + notfounds.join("\u3001"));
}
}
}
}
ready_main()