xiguacwsedu

storehouse

此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.gf.qytechs.cn/scripts/479975/1340493/xiguacwsedu.js

  1. // ==UserScript==
  2. // @name xiguacwsedu
  3. // @version 0.0.8
  4. // @description storehouse
  5. // @author Xiguayaodade
  6. // @license MIT
  7. // @match *://cws.edu-edu.com/*
  8. // @grant GM_info
  9. // @grant GM_getTab
  10. // @grant GM_saveTab
  11. // @grant GM_setValue
  12. // @grant GM_getValue
  13. // @grant GM_addStyle
  14. // @grant unsafeWindow
  15. // @grant GM_listValues
  16. // @grant GM_deleteValue
  17. // @grant GM_setClipboard
  18. // @grant GM_notification
  19. // @grant GM_xmlhttpRequest
  20. // @grant GM_getResourceText
  21. // @grant GM_registerMenuCommand
  22. // @grant GM_unregisterMenuCommand
  23. // @grant GM_addValueChangeListener
  24. // @grant GM_removeValueChangeListener
  25. // @namespace http://tampermonkey.net/
  26. // @homepage http://8.130.116.135/?member/login/
  27. // @source http://8.130.116.135/?member/login/
  28. // @icon https://picx.zhimg.com/v2-ce62b58ab2c7dc67d6cabc3508db5795_l.jpg?source=32738c0c
  29. // @connect icodef.com
  30. // @connect localhost
  31. // @require https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js
  32. // ==/UserScript==
  33.  
  34. (function() {
  35. 'use strict';
  36. /* globals jQuery, $, waitForKeyElements */
  37.  
  38.  
  39. var speedonoff = false;
  40. var speedIn = null;
  41. var ddds3 = null;
  42. var addMessage = null;
  43.  
  44. let btn1=GM_registerMenuCommand ("\u4f5c\u8005\uff1a\ud83c\udf49\u897f\u74dc\u8981\u5927\u7684\ud83c\udf49", function(){
  45. confirm("Hello,\u611f\u8c22\u4f7f\u7528\ud83c\udf49\u897f\u74dc\u5237\u8bfe\u52a9\u624b\ud83c\udf49\uff01\u591a\u591a\u53cd\u9988\u54e6");
  46. GM_unregisterMenuCommand(btn1);
  47. }, "");
  48. let btn2=GM_registerMenuCommand ("\u4ed8\u8d39\u5185\u5bb9", function(){
  49. alert("\u9650\u65f6\u514d\u8d39\uff0c\u5168\u529b\u5f00\u53d1\u4e2d...");
  50. }, "p");
  51.  
  52. //存储当前课程章节数量
  53. var chapterCount = 0;
  54. //存储当前课程章节索引
  55. var chapterId = 1;
  56. //存储课后练习小题数量
  57. var questionCount = 0;
  58. //存放播放器组件
  59. var elevideo;
  60. //课后练习选择框索引
  61. var rediosIndex = 0;
  62. //课程索引
  63. var courseId = GM_getValue("courseId");
  64. //课程总数
  65. var courseCount = null;
  66. //课程列表与问卷分离索引
  67. var courseIndex = null;
  68.  
  69. //----解决重复监听start----
  70. //视频开始的公共方法
  71. var vdplay = null;
  72. //视频正在播放的公共方法
  73. var vdplaying = null;
  74. //视频暂停的公共方法
  75. var vdpause = null;
  76. //视频结束的公共方法
  77. var vdended = null;
  78. //监听音量的公共方法
  79. var vdvolume = null;
  80. //----解决重复监听end----
  81.  
  82. //-----添加监听start------
  83. var addLisenner = function(){
  84.  
  85. //获取播放器组件
  86. elevideo = document.querySelector("video");
  87.  
  88. vdplay = function(){
  89. let tm = 5 * 60 * 1000;
  90. console.log("xigua:\u5f00\u59cb\u64ad\u653e");
  91. addMessage("xigua:\u5f00\u59cb\u64ad\u653e");
  92. // speedIn = setInterval(function(){
  93. // // speedff();
  94. // },tm);
  95. };
  96. vdplaying = function(){
  97. console.log("xigua:\u6b63\u5728\u64ad\u653e");
  98. addMessage("xigua:\u6b63\u5728\u64ad\u653e");
  99. };
  100. vdpause = function(){
  101. clearInterval(speedIn);
  102. console.log("xigua:\u6682\u505c\u64ad\u653e");
  103. addMessage("xigua:\u6682\u505c\u64ad\u653e");
  104. setTimeout(function(){
  105. if(document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByTagName("div")[1].className == 'ivu-modal-wrap'){
  106. console.log("xigua:课堂练习");
  107. addMessage("xigua:课堂练习");
  108. answer();
  109. }else if(document.getElementsByClassName("alert-modal v-transfer-dom")[1].getElementsByTagName("div")[1].className == 'ivu-modal-wrap'){
  110. console.log("xigua:提示");
  111. addMessage("xigua:提示");
  112. //document.getElementsByClassName("alert-modal v-transfer-dom")[1].getElementsByTagName("button")[0].click();
  113. //setTimeout(function(){
  114. //elevideo.play();
  115. //},1000);
  116. }else{
  117. console.log("xigua:手动暂停,无需操作");
  118. addMessage("xigua:手动暂停,无需操作");
  119. try{
  120. console.log("xigua:调用补丁函数");
  121. addMessage("xigua:调用补丁函数");
  122. document.getElementsByClassName("alert-modal v-transfer-dom")[1].getElementsByTagName("button")[0].click();
  123. setTimeout(function(){
  124. elevideo.play();
  125. },1000);
  126. }catch(e){
  127. console.log("xigua:补丁异常");
  128. addMessage("xigua:补丁异常");
  129. }
  130. }
  131. },1500);
  132. };
  133. vdended = function(){
  134. clearInterval(speedIn);
  135. console.log("xigua:结束播放");
  136. addMessage("xigua:结束播放");
  137. };
  138. vdvolume = function(){
  139. if(elevideo.volume < 1 && elevideo.volume > 0){
  140. let vlum = elevideo.volume.toString();
  141. console.log("xigua:当前音量("+vlum.substring(2,4)+"%)");
  142. addMessage("xigua:当前音量("+vlum.substring(2,4)+"%)");
  143. }else if(elevideo.volume == 0){
  144. console.log("xigua:当前音量(0%)");
  145. addMessage("xigua:当前音量(0%)");
  146. }else{
  147. console.log("xigua:当前音量(100%)");
  148. addMessage("xigua:当前音量(100%)");
  149. }
  150. }
  151.  
  152. elevideo.addEventListener('play',vdplay);
  153. elevideo.addEventListener('playing',vdplaying);
  154. elevideo.addEventListener('pause',vdpause);
  155. elevideo.addEventListener('ended',vdended);
  156. elevideo.addEventListener('volumechange',vdvolume);
  157.  
  158. setTimeout(function(){
  159. //elevideo.play();
  160. elevideo.volume = 0;
  161. },3000);
  162. }
  163. //-----添加监听end------
  164.  
  165. function refreshPage() {
  166. location.reload(); // 刷新当前页面
  167. }
  168.  
  169. setInterval(refreshPage, 60 * 60 * 1000); // 60
  170.  
  171. function lisenLoop(){
  172. if(document.getElementsByClassName("alert-modal v-transfer-dom")[1].getElementsByTagName("div")[1].className == 'ivu-modal-wrap'){
  173. console.log("xigua:提示lisenLoop");
  174. addMessage("xigua:提示lisenLoop");
  175. document.getElementsByClassName("alert-modal v-transfer-dom")[1].getElementsByTagName("button")[0].click();
  176. setTimeout(function(){
  177. elevideo.play();
  178. },1000);
  179. }
  180. setTimeout(function(){
  181. lisenLoop();
  182. },1000);
  183. }
  184.  
  185. //-----移除监听start---
  186. var removeLisenner = function(){
  187. if(vdplay != null){
  188. elevideo.removeEventListener("play", vdplay);
  189. }
  190. if(vdplaying != null){
  191. elevideo.removeEventListener("playing", vdplaying);
  192. }
  193. if(vdpause != null){
  194. elevideo.removeEventListener("pause", vdpause);
  195. }
  196. if(vdended != null){
  197. elevideo.removeEventListener("ended", vdended);
  198. }
  199. if(vdended != null){
  200. elevideo.removeEventListener("ended", vdended);
  201. }
  202. if(vdvolume != null){
  203. elevideo.removeEventListener("volumechange",vdvolume);
  204. }
  205. }
  206. //-----移除监听end---
  207.  
  208. //-----倍速start-----
  209. var speedff = function(){
  210. if(speedonoff){
  211. let vdText = document.getElementsByClassName("video-progress clearfix not-start")[0].getElementsByClassName("text")[0].getElementsByTagName("span")[1].innerText;
  212. if(parseFloat(vdText) <= 70){
  213. setTimeout(function(){
  214. document.querySelector("video").playbackRate=16;
  215. console.log("X16");
  216. setTimeout(function(){
  217. document.querySelector("video").playbackRate=1;
  218. console.log("X1");
  219. },800);
  220. },1000);
  221. }
  222. }else{
  223. addMessage("断点倍速状态:关闭");
  224. }
  225. }
  226. //-----倍速end-----
  227.  
  228. //------检索未完成章节start------
  229. var search = function(){
  230. if(chapterId <= chapterCount){
  231. let learningPace = document.getElementsByClassName("row flex")[chapterId].getElementsByTagName("span")[3].innerText.substring(0,3);
  232. let chapterName = document.getElementsByClassName("row flex")[chapterId].getElementsByTagName("span")[1].innerText;
  233. switch(learningPace)
  234. {
  235. case'学习中':
  236. addMessage(chapterName+"|未完成,开始学习");
  237. console.log(chapterName+"|未完成,开始学习");
  238. setTimeout(function(){
  239. document.getElementsByClassName("row flex")[chapterId].getElementsByTagName("span")[4].getElementsByTagName("a")[0].click();
  240. },2000);
  241. break;
  242. case'未学习':
  243. addMessage(chapterName+"|未完成,开始学习");
  244. console.log(chapterName+"|未完成,开始学习");
  245. setTimeout(function(){
  246. document.getElementsByClassName("row flex")[chapterId].getElementsByTagName("span")[4].getElementsByTagName("a")[0].click();
  247. },2000);
  248. break;
  249. case'未考试':
  250. // addMessage(chapterName+"|未完成");
  251. // console.log(chapterName+"|未完成");
  252. addMessage(chapterName+"|暂不考试,学习下一科");
  253. console.log(chapterName+"|暂不考试,学习下一科");
  254. setTimeout(function(){
  255. //document.getElementsByClassName("row flex")[chapterId].getElementsByTagName("span")[4].getElementsByTagName("a")[0].click();
  256. document.getElementsByClassName("wrap flex-column")[0].getElementsByClassName("address")[0].getElementsByClassName("btn")[0].click();
  257. },2000);
  258. break;
  259. case'未通过':
  260. // addMessage(chapterName+"|未通过");
  261. // console.log(chapterName+"|未通过");
  262. addMessage(chapterName+"|暂不考试,学习下一科");
  263. console.log(chapterName+"|暂不考试,学习下一科");
  264. setTimeout(function(){
  265. //document.getElementsByClassName("row flex")[chapterId].getElementsByTagName("span")[4].getElementsByTagName("a")[0].click();
  266. document.getElementsByClassName("wrap flex-column")[0].getElementsByClassName("address")[0].getElementsByClassName("btn")[0].click();
  267. },2000);
  268. break;
  269. case'未操作':
  270. // addMessage(chapterName+"|须填写");
  271. // console.log(chapterName+"|须填写");
  272. addMessage(chapterName+"|暂不填写问卷,学习下一科");
  273. console.log(chapterName+"|暂不填写问卷,学习下一科");
  274. setTimeout(function(){
  275. // document.getElementsByClassName("row flex")[chapterId].getElementsByTagName("span")[4].getElementsByTagName("a")[0].click();
  276. document.getElementsByClassName("wrap flex-column")[0].getElementsByClassName("address")[0].getElementsByClassName("btn")[0].click();
  277. },2000);
  278. break;
  279. default:
  280. addMessage(chapterName+"|已完成");
  281. console.log(chapterName+"|已完成");
  282. chapterId++;
  283. search();
  284. }
  285. }else{
  286. addMessage("本课程已完成,退出!");
  287. console.log("本课程已完成,退出!");
  288. }
  289.  
  290. }
  291. //------检索未完成章节end------
  292.  
  293. //------单选题答题方法start------
  294. var onlyRe = function(){
  295. setTimeout(function(){
  296. let positiveSolution = document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("positiveSolution")[0].innerText.substring(4);
  297. let array = positiveSolution.split(' ');
  298. let str2 = array.join('');
  299. console.log("xigua:答案:"+str2);
  300. setTimeout(function(){
  301. switch(str2[0])
  302. {
  303. case 'A':
  304. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("question-options")[0].getElementsByClassName("question-option")[0].getElementsByClassName("mark")[0].click();
  305. console.log("点击A");
  306. break;
  307. case 'B':
  308. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("question-options")[0].getElementsByClassName("question-option")[1].getElementsByClassName("mark")[0].click();
  309. console.log("点击B");
  310. break;
  311. case 'C':
  312. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("question-options")[0].getElementsByClassName("question-option")[2].getElementsByClassName("mark")[0].click();
  313. break;
  314. case 'D':
  315. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("question-options")[0].getElementsByClassName("question-option")[3].getElementsByClassName("mark")[0].click();
  316. console.log("点击D");
  317. break;
  318. }
  319. },1500);
  320. setTimeout(function(){
  321. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("ivu-btn ivu-btn-primary")[0].click();
  322. if(document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByTagName("div")[1].className == 'ivu-modal-wrap'){
  323. console.log("xigua:回答完毕");
  324. addMessage("xigua:回答完毕");
  325. setTimeout(function(){
  326. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("ivu-btn ivu-btn-primary")[0].click();
  327. },1000);
  328. }else{
  329. console.log("xigua:回答正确");
  330. addMessage("xigua:回答正确");
  331. }
  332. },3000);
  333. },500);
  334. }
  335. //------单选题答题方法end------
  336.  
  337. //------多选题答题方法start------
  338. var mostRe = function(){
  339. setTimeout(function(){
  340. let positiveSolution = document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("positiveSolution")[0].innerText.substring(4);
  341. let array = positiveSolution.split(' ');
  342. let str2 = array.join('');
  343. console.log("xigua:答案:"+str2);
  344. setTimeout(function(){
  345. for(var j=0;j<str2.length;j++){
  346. switch(str2[j])
  347. {
  348. case 'A':
  349. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("question-options")[0].getElementsByClassName("question-option")[0].getElementsByClassName("mark")[0].click();
  350. console.log("点击A");
  351. break;
  352. case 'B':
  353. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("question-options")[0].getElementsByClassName("question-option")[1].getElementsByClassName("mark")[0].click();
  354. console.log("点击B");
  355. break;
  356. case 'C':
  357. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("question-options")[0].getElementsByClassName("question-option")[2].getElementsByClassName("mark")[0].click();
  358. break;
  359. case 'D':
  360. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("question-options")[0].getElementsByClassName("question-option")[3].getElementsByClassName("mark")[0].click();
  361. console.log("点击D");
  362. break;
  363. case 'E':
  364. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("question-options")[0].getElementsByClassName("question-option")[4].getElementsByClassName("mark")[0].click();
  365. console.log("点击E");
  366. break;
  367. case 'F':
  368. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("question-options")[0].getElementsByClassName("question-option")[5].getElementsByClassName("mark")[0].click();
  369. console.log("点击F");
  370. break;
  371. case 'G':
  372. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("question-options")[0].getElementsByClassName("question-option")[6].getElementsByClassName("mark")[0].click();
  373. console.log("点击G");
  374. break;
  375. default:
  376. console.log("当前多选题选项过多,系统需更新!");
  377. }
  378. }
  379. },1500);
  380. setTimeout(function(){
  381. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("ivu-btn ivu-btn-primary")[0].click();
  382. if(document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByTagName("div")[1].className == 'ivu-modal-wrap'){
  383. console.log("xigua:回答完毕");
  384. addMessage("xigua:回答完毕");
  385. setTimeout(function(){
  386. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("ivu-btn ivu-btn-primary")[0].click();
  387. },1000);
  388. }else{
  389. console.log("xigua:回答正确");
  390. addMessage("xigua:回答正确");
  391. }
  392. },3000);
  393. },500);
  394. }
  395. //------多选题答题方法end------
  396.  
  397. //------判断题答题方法start------
  398. var judgRe = function(){
  399. setTimeout(function(){
  400. let positiveSolution = document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("positiveSolution")[0].innerText.substring(4);
  401. let array = positiveSolution.split(' ');
  402. let str2 = array.join('');
  403. console.log("xigua:答案:"+str2);
  404. setTimeout(function(){
  405. switch(str2[0])
  406. {
  407. case 'A':
  408. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("question-options")[0].getElementsByClassName("question-option")[0].getElementsByClassName("mark")[0].click();
  409. console.log("点击A");
  410. break;
  411. case 'B':
  412. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("question-options")[0].getElementsByClassName("question-option")[1].getElementsByClassName("mark")[0].click();
  413. console.log("点击B");
  414. break;
  415. }
  416. },1500);
  417. setTimeout(function(){
  418. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("ivu-btn ivu-btn-primary")[0].click();
  419. if(document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByTagName("div")[1].className == 'ivu-modal-wrap'){
  420. console.log("xigua:回答完毕");
  421. addMessage("xigua:回答完毕");
  422. setTimeout(function(){
  423. document.getElementsByClassName("preview-modal v-transfer-dom")[0].getElementsByClassName("ivu-btn ivu-btn-primary")[0].click();
  424. },1000);
  425. }else{
  426. console.log("xigua:回答正确");
  427. addMessage("xigua:回答正确");
  428. }
  429. },3000);
  430. },1500);
  431. }
  432. //------判断题答题方法end------
  433.  
  434. //------课堂练习start------
  435. var answer = function(){
  436. let tName = document.getElementsByClassName("preview-modal v-transfer-dom")[0].querySelector(".question-stem-content-preview").innerText;
  437. if(tName === '单选题'){
  438. console.log("xigua:单选题,开始作答");
  439. addMessage("xigua:单选题,开始作答");
  440. onlyRe();
  441. }
  442. if(tName === '多选题'){
  443. console.log("xigua:多选题,开始作答");
  444. addMessage("xigua:多选题,开始作答");
  445. mostRe();
  446. }
  447. if(tName === '判断题'){
  448. console.log("xigua:判断题,开始作答");
  449. addMessage("xigua:判断题,开始作答");
  450. judgRe();
  451. }
  452. }
  453. //------课堂练习end------
  454.  
  455. //------考试start------
  456. var exam = function(){
  457. //获取考题数量
  458. questionCount = document.getElementsByClassName("shijuanlist flex-column")[0].getElementsByClassName("sjitem flex-column").length;
  459. addMessage("开始考试,共"+questionCount+"题");
  460. console.log("开始考试,共"+questionCount+"题");
  461. for(let i=0; i<questionCount; i++){
  462. var questionType = document.getElementsByClassName("shijuanlist flex-column")[0].getElementsByClassName("sjitem flex-column")[i].getElementsByClassName("timu flex")[0].getElementsByClassName("sp")[0].innerText.substring(9,11);
  463. if(questionType === '单选'){
  464. addMessage("第"+(i+1)+"题|单选题");
  465. console.log("第"+(i+1)+"题|单选题");
  466. let randomInteger = Math.floor(Math.random() * 4);
  467. addMessage((i+1)+"随机数="+randomInteger);
  468. console.log((i+1)+"随机数="+randomInteger);
  469. document.getElementsByClassName("shijuanlist flex-column")[0].getElementsByClassName("sjitem flex-column")[i].getElementsByClassName("item flex")[randomInteger].click();
  470. }
  471. if(questionType === '多选'){
  472. addMessage("第"+(i+1)+"题|多选题");
  473. console.log("第"+(i+1)+"题|多选题");
  474. let choicesCount = document.getElementsByClassName("shijuanlist flex-column")[0].getElementsByClassName("sjitem flex-column")[i].getElementsByClassName("item flex").length;
  475. let randomIntegerOne = Math.floor(Math.random() * 2);
  476. let randomIntegerTow = Math.floor(Math.random() * 2)+2;
  477. if(choicesCount < 3){
  478. addMessage((i+1)+"随机数="+randomIntegerOne);
  479. console.log((i+1)+"随机数="+randomIntegerOne);
  480. document.getElementsByClassName("shijuanlist flex-column")[0].getElementsByClassName("sjitem flex-column")[i].getElementsByClassName("item flex")[randomIntegerOne].click();
  481. }else{
  482. addMessage((i+1)+"随机数="+randomIntegerOne,randomIntegerTow);
  483. console.log((i+1)+"随机数="+randomIntegerOne,randomIntegerTow);
  484. document.getElementsByClassName("shijuanlist flex-column")[0].getElementsByClassName("sjitem flex-column")[i].getElementsByClassName("item flex")[randomIntegerOne].click();
  485. document.getElementsByClassName("shijuanlist flex-column")[0].getElementsByClassName("sjitem flex-column")[i].getElementsByClassName("item flex")[randomIntegerTow].click();
  486. }
  487. }
  488. if(questionType === '简答'){
  489. addMessage("第"+(i+1)+"题|简答题,简答题模板需更新!");
  490. console.log("第"+(i+1)+"题|简答题,简答题模板需更新!");
  491. }
  492. }
  493. //提交
  494. setTimeout(function(){
  495. document.getElementsByClassName("btns flex")[0].getElementsByClassName("blue-btn")[1].click();
  496. setTimeout(function(){
  497. if(document.getElementsByClassName("tanchuang")[0] != null){
  498. let backBtn = document.getElementsByClassName("tanchuang")[0].getElementsByClassName("btn")[0].innerText;
  499. if(backBtn === '返回课程'){
  500. addMessage("考试通过");
  501. console.log("考试通过");
  502. document.getElementsByClassName("tanchuang")[0].getElementsByClassName("btn")[0].click();
  503. }
  504. if(backBtn === '重答'){
  505. addMessage("考试未通过");
  506. console.log("考试未通过");
  507. document.getElementsByClassName("tanchuang")[0].getElementsByClassName("btn")[0].click();
  508. setTimeout(function(){
  509. exam();
  510. },1000);
  511. }
  512. }else{
  513. addMessage("无弹窗");
  514. console.log("无弹窗");
  515. }
  516. },1500);
  517. },1500);
  518. }
  519. //------考试end------
  520.  
  521. const panel = function(){
  522. var container = $('<div id="gm-interface"></div>');
  523. var titleBar = $('<div id="gm-title-bar">\ud83c\udf49\u897f\u74dc\u7f51\u8bfe\u52a9\u624b\ud83c\udf49</div>');
  524. var minimizeButton = $('<div title="\u6536\u8d77" style="display:black"><svg id="gm-minimize-button" class="bi bi-dash-square" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M14 1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z"/><path fill-rule="evenodd" d="M3.5 8a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 0 1H4a.5.5 0 0 1-.5-.5z"/></svg></div>');
  525. var maxButton = $('<div title="\u5c55\u5f00" style="display:none"><svg id="gm-minimize-button" class="bi bi-plus-square" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M8 3.5a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5H4a.5.5 0 0 1 0-1h3.5V4a.5.5 0 0 1 .5-.5z"/><path fill-rule="evenodd" d="M7.5 8a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 0 1H8.5V12a.5.5 0 0 1-1 0V8z"/><path fill-rule="evenodd" d="M14 1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z"/></svg></div>');
  526. var content = $('<div id="gm-content"></div>');
  527. var tips = $('<div class="tip" style="display:none;">\u957f\u6309\u62d6\u62fd</div>');
  528. var scrollText = $('<marquee>').text('\u4e7e\u5764\u672a\u5b9a\uff0c\u4f60\u6211\u7686\u662f\u9ed1\u9a6c----\u4f5c\u8005\uff1a\u897f\u74dc\u8981\u5927\u7684\uff08\u611f\u8c22\u652f\u6301\uff01\uff09').css({
  529. 'position': 'absolute',
  530. 'top': '15%',
  531. 'left': '50%',
  532. 'transform': 'translate(-50%, -50%)',
  533. 'width': '90%',
  534. 'height': '25px',
  535. 'font-size': '16px',
  536. 'line-height': '1.5',
  537. 'white-space': 'nowrap'
  538. }).appendTo(content);
  539. //var ddds1 = $('<div style="position: absolute;top: 20%;width:90%;height:10%;padding: 3px;background: #ffedf0;border-radius: 5px;">\u70b9\u51fb\u542f\u52a8\uff1a<button id="startxg" style="position: absolute;width:48px;right: 10px;background-color: #ffe5e5;border-radius: 4px;border-color: #ffc0c0;color: grey;">\u542f\u52a8</button></div>');
  540. //var ddds5 = $('<div style="position: absolute;top: 35%;width:90%;height:10%;padding: 3px;background: #ffedf0;border-radius: 5px;">\u70b9\u51fb\u542f\u52a8\uff1a<button id="stopxg" style="position: absolute;width:48px;right: 10px;background-color: #ffe5e5;border-radius: 4px;border-color: #ffc0c0;color: grey;">暂停</button></div>');
  541. var ddds2 = $('<div style="position: absolute;top: 73%;width:94%;height:10%;padding: 3px;background: #ffedf0;border-radius: 5px;">\u65ad\u70b9\u500d\u901f\uff1a<button id="switchButton" style="position: absolute;width:88px;right: 180px;background-color: #ffe5e5;border-radius: 4px;border-color: #ffc0c0;color: grey;">当前:关闭</button><button id="speedxgone" style="position: absolute;width:58px;right: 80px;background-color: #ffe5e5;border-radius: 4px;border-color: #ffc0c0;color: grey;">清空缓存</button></div>');
  542. ddds3 = $('<div id="message-container" style="position: absolute;display: grid;align-content: center;justify-content: center;top: 20%;width:94%;height:52%;max-height:62%;overflow-y:auto;padding: 3px;background: #ffffff;border-radius: 5px;">-------------------------------------------------------------------------------</div>');
  543. var ddds4 = $('<div style="position: absolute;top: 85%;width:94%;height:10%;padding: 3px;background: #ffedf0;border-radius: 5px;"><a href="http://8.130.116.135/?member/login/" style="position: absolute;right: 10px;text-decoration: none;color: pink;">\u003e\u003e\u003e\u8054\u7cfb\u003a\u0031\u0039\u0030\u0038\u0032\u0034\u0035\u0033\u0030\u0032\u0040\u0071\u0071\u002e\u0063\u006f\u006d</a></div>');
  544.  
  545. container.append(titleBar);
  546. //content.append(ddds1);
  547. //content.append(ddds5);
  548. content.append(ddds2);
  549. content.append(ddds3);
  550. content.append(ddds4);
  551. container.append(content);
  552. container.append(maxButton);
  553. container.append(minimizeButton);
  554. $('body').append(container);
  555. $('body').append(tips);
  556.  
  557. GM_addStyle(`
  558. #gm-interface {
  559. position: fixed;
  560. top: 50%;
  561. left: 50%;
  562. border-radius: 5px;
  563. background-color: white;
  564. z-index: 9999;
  565. }
  566.  
  567. #gm-title-bar {
  568. padding: 5px;
  569. background-color: #ffc0c0;
  570. border: 1px solid black;
  571. border-radius: 5px;
  572. cursor: grab;
  573. }
  574.  
  575. #gm-minimize-button {
  576. position: absolute;
  577. top: 2px;
  578. right: 2px;
  579. width: 30px;
  580. height: 30px;
  581. border-radius: 5px;
  582. padding: 0;
  583. font-weight: bold;
  584. background-color: #ffc0c0;
  585. cursor: pointer;
  586. }
  587.  
  588. #gm-content {
  589. padding: 10px;
  590. border: 1px solid black;
  591. border-radius: 2px 2px 5px 5px;
  592. background-color: #ffe5e5;
  593. width: 400px;
  594. height: 300px;
  595. }
  596. .tip{
  597. font-family: "黑体";
  598. color: black;
  599. -webkit-transform: scale(0.8);
  600. position:absolute;
  601. padding: 6px 5px;
  602. background-color:#ffe8f0;
  603. border-radius: 4px;
  604. z-index: 9999;
  605. }
  606. `);
  607.  
  608. titleBar.on('mousemove',function(e){
  609. tips.attr("style", "display:black;");
  610. var top = e.pageY+5;
  611. var left = e.pageX+5;
  612. tips.css({
  613. 'top' : top + 'px',
  614. 'left': left+ 'px'
  615. });
  616. });
  617.  
  618. titleBar.on('mouseout',function(){
  619. tips.hide();
  620. });
  621.  
  622. titleBar.on('mousedown', function(e) {
  623. var startX = e.pageX - container.offset().left + window.scrollX;
  624. var startY = e.pageY - container.offset().top + window.scrollY;
  625.  
  626. $(document).on('mousemove', function(e) {
  627. e.preventDefault();
  628. var newX = e.pageX - startX;
  629. var newY = e.pageY - startY;
  630. container.css({ left: newX, top: newY });
  631. });
  632.  
  633. $(document).on('mouseup', function() {
  634. $(document).off('mousemove');
  635. $(document).off('mouseup');
  636. });
  637. });
  638.  
  639.  
  640. minimizeButton.on('click', function() {
  641. minimizeButton.attr("style", "display:none;");
  642. maxButton.attr("style", "display:black;");
  643. content.slideToggle(0);
  644. container.css({ width: 200 });
  645. });
  646.  
  647. maxButton.on('click', function() {
  648. minimizeButton.attr("style", "display:black;");
  649. maxButton.attr("style", "display:none;");
  650. content.slideToggle(0);
  651. container.css({ width: 400 });
  652. });
  653.  
  654. // $("#speedxgsex").on('click',function(){
  655. // document.querySelector("video").playbackRate=16;
  656. // addMessage("\u500d\u901f\uff1a\u0058\u0031\u0036");
  657. // });
  658.  
  659. $("#speedxgone").on('click',function(){
  660. GM_deleteValue("courseId");
  661. ddds3.children().remove();
  662. addMessage("已清空缓存");
  663. });
  664.  
  665. $("#switchButton").on('click',function(){
  666. if (speedonoff) {
  667. speedonoff = false;
  668. addMessage("\u500d\u901f\uff1a\u5173\u95ed");
  669. $("#switchButton").text("当前:关闭");
  670. } else {
  671. speedonoff = true;
  672. addMessage("\u500d\u901f\uff1a\u5f00\u542f");
  673. $("#switchButton").text("当前:开启");
  674. }
  675. });
  676.  
  677. // 监听鼠标滚轮事件,实现消息框滚动
  678. ddds3.on('mousewheel', function(event) {
  679. event.preventDefault();
  680. var scrollTop = ddds3.scrollTop();
  681. ddds3.scrollTop(scrollTop + event.originalEvent.deltaY);
  682. });
  683.  
  684. // 添加新消息
  685. addMessage = function(message){
  686. // 检查消息数量,移除最早的一条消息
  687. if (ddds3.children().length >= 288) {
  688. ddds3.children().first().remove();
  689. }
  690.  
  691. let a = new Date();
  692. let h = a.getHours();
  693. let m = a.getMinutes();
  694. let s = a.getSeconds();
  695.  
  696. // 创建消息元素并添加到消息框容器
  697. var messageElement = $('<div class="message"></div>').text(message+"---("+h+":"+m+":"+s+")").css({
  698. 'margin-bottom': '10px'
  699. }).appendTo(ddds3);
  700. }
  701.  
  702. }
  703.  
  704. panel();
  705. addMessage("正在启动,请稍后...");
  706.  
  707. //------等待网页加载完成start-----
  708. var wait = setInterval(function (){
  709. let nowUrl = window.location.href;
  710. if(nowUrl.substring(0,35) === 'https://cws.edu-edu.com/page/client'){
  711. addMessage("播放页");
  712. console.log("播放页");
  713. // removeLisenner();
  714. // addLisenner();
  715. if(document.getElementsByClassName("ivu-switch ivu-switch-default")[0].getElementsByClassName("ivu-switch-inner")[0].innerText == '关'){
  716. document.getElementsByClassName("ivu-switch ivu-switch-default")[0].click();
  717. }
  718. lisenLoop();
  719. clearInterval(wait);
  720. }else {
  721. addMessage("请进入要学习的课程章节页");
  722. console.log("请进入要学习的课程章节页");
  723. }
  724. clearInterval(wait);
  725. }, 5000);
  726. //------等待网页加载完成end-----
  727.  
  728. setInterval(function (){
  729. removeLisenner();
  730. addLisenner();
  731. }, 500);
  732.  
  733. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址