// ==UserScript== // @name FCQ网课通助手[全网题库][通用智能适配答题][刷课] // @namespace http://tampermonkey6.net // @version 1.0.51 // @description 支持【寒假教师研修】【国家智慧教育公共服务平台】【国家中小学智慧教育平台】【超星学习通】【智慧树】【职教云系列】【雨课堂】【考试星】【168网校】【u校园】【大学MOOC】【云班课】【优慕课】【继续教育类】【绎通云课堂】【九江系列】【柠檬文才】【亿学宝云】【优课学堂】【小鹅通】【安徽继续教育】 【上海开放大学】 【华侨大学自考网络助学平台】【良师在线】【和学在线】【人卫慕课】【国家开放大学】【山财培训网(继续教育)】【浙江省高等学校在线开放课程共享平台】【国地质大学远程与继续教育学院】【重庆大学网络教育学院】【浙江省高等教育自学考试网络助学平台】【湖南高等学历继续教育】【优学院】【学起系列】【青书学堂】【学堂在线】【英华学堂】【广开网络教学平台】等平台的测验考试,内置题库,如有疑问或无法使用加群:399697149 咨询 // @author button2 // @match *://*/* // @run-at document-start // @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 greasyfork-zh.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 47.115.205.88 // @connect 14.103.143.140 // @connect 116.63.141.215 // @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 cloudstatic.cn // @connect cloudbasefunction.cn // @connect qcloud.la // @connect wk66.top // @connect 911285.xyz // @connect xmig6.cn // @connect 026wk.xyz // @connect 6hck.xyz // @connect 52xn.xyz // @connect siliconflow.cn // @connect xunhupay.com // @connect toolchest.cn // @connect guilan.cn // @connect qingsuyun.com // @connect gzgsmooc.org.cn // @connect qfcdn.icu // @connect ykt.io // @connect dkjdda.top // @connect sswpdd.xyz // @connect scriptcat.org // @connect wdjycj.com // @connect dahi.icu // @connect soujiaoben.org // @connect soujiaoben.com // @connect 127.0.0.1 // @connect * // @antifeature payment // @antifeature referral-link // @downloadURL https://update.greasyfork.icu/scripts/502159/FCQ%E7%BD%91%E8%AF%BE%E9%80%9A%E5%8A%A9%E6%89%8B%5B%E5%85%A8%E7%BD%91%E9%A2%98%E5%BA%93%5D%5B%E9%80%9A%E7%94%A8%E6%99%BA%E8%83%BD%E9%80%82%E9%85%8D%E7%AD%94%E9%A2%98%5D%5B%E5%88%B7%E8%AF%BE%5D.user.js // @updateURL https://update.greasyfork.icu/scripts/502159/FCQ%E7%BD%91%E8%AF%BE%E9%80%9A%E5%8A%A9%E6%89%8B%5B%E5%85%A8%E7%BD%91%E9%A2%98%E5%BA%93%5D%5B%E9%80%9A%E7%94%A8%E6%99%BA%E8%83%BD%E9%80%82%E9%85%8D%E7%AD%94%E9%A2%98%5D%5B%E5%88%B7%E8%AF%BE%5D.meta.js // ==/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("<本试卷使用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 = ''; 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(/^(\W+)<\/b>/)[1]; let type = str.match(/^\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-p7ejf6ik6c3sy7h-7c8944ac450f-1252168680.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('meteor-web') != -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, 1).map(async (url, i) => { try { var res = await GM_req3({ url: url }) if ((res.response || "").indexOf('meteor-web') != -1) { return i } } catch (e) { } return -1 })) if (index != -1) { FCQIndex = index } else { FCQIndex = 1 } } 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 = $('
')[0] this.element = element var shadow = element.attachShadow({ mode: 'closed' }); this.xm_ui = $('
') unsafeWindow.fcq_search = true const styleTag = ` `; $(styleTag).appendTo(this.xm_ui); let $menu = $( `
FCQ网课助手
题目 :
使用前请先获取登录token后填入,选中文字点击搜索即可,更多功能请前往官网查阅,图标可拖动

`); var mask = $(`