autoCX学习通自动刷课脚本

autoCX是基于原生js编写的一个网页版学习通刷课脚本,其功能包括但不限于视频快进,ppt快进,章节测试快进(暂不支持自动答题),且脚本支持后台自动刷课。

目前为 2024-04-02 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name autoCX学习通自动刷课脚本
  3. // @namespace https://mooc1.chaoxing.com/
  4. // @version 1.0.0
  5. // @description autoCX是基于原生js编写的一个网页版学习通刷课脚本,其功能包括但不限于视频快进,ppt快进,章节测试快进(暂不支持自动答题),且脚本支持后台自动刷课。
  6. // @author undefined205
  7. // @match https://mooc1.chaoxing.com/mycourse/studentstudy*
  8. // @license MIT
  9. // ==/UserScript==
  10.  
  11. window.onload = function()
  12. {
  13. runJs();
  14. };
  15.  
  16. function runJs()
  17. {
  18. Timer1 = setTimeout(function()
  19. {
  20. var fraDoc_1 = document.getElementById("iframe").contentWindow.document;
  21. var fraArr = fraDoc_1.getElementsByTagName("iframe");
  22. var t5 = calT5(fraArr.length);
  23. var Timer5 = setTimeout(function()
  24. {
  25. if(fraArr.length) //如果本页含有任务点框架
  26. {
  27. fastFwd(fraArr,0);
  28. }else //如果页面不含有任务点框架
  29. {
  30. document.getElementsByClassName("jb_btn jb_btn_92 fr fs14 nextChapter")[0].click(); //强制下一节
  31. var Timer2 = setTimeout(function()
  32. {
  33. runJs();
  34. },500); //页面刷新等待
  35. }
  36. },t5); //页面初始化加时
  37. },700); //页面初始化等待(保证的最小时间)
  38. }
  39.  
  40. function fastFwd(fraArr,crt_fra_order) //任务点框架,当前框架序号
  41. {
  42. var fraDoc_2 = fraArr[crt_fra_order].contentWindow.document;
  43. if(fraDoc_2.getElementsByTagName("video").length) //如果为视频任务框架
  44. {
  45. var vid = fraDoc_2.getElementsByTagName("video")[0];
  46. vid.addEventListener("ended",function()
  47. {
  48. clearInterval(Timer6); //停止视频自动播放
  49. var Timer3 = setTimeout(function()
  50. {
  51. if(vid.ended)
  52. {
  53. if(crt_fra_order == fraArr.length - 1) //如果是最后一个任务点框架
  54. {
  55. document.getElementsByClassName("jb_btn jb_btn_92 fr fs14 nextChapter")[0].click(); //强制下一节
  56. var Timer2 = setTimeout(function()
  57. {
  58. runJs();
  59. },500); //页面刷新等待
  60. }else{
  61. fastFwd(fraArr,crt_fra_order + 1);
  62. }
  63. }else
  64. {
  65. Timer6 = setInterval(function()
  66. {
  67. if(vid.paused)
  68. {
  69. vid.play(); //自动播放
  70. }
  71. },100); //视频暂停状态监听
  72. }
  73. },1300); //视频结束确认
  74. });
  75. vid.muted = true; //满足自动播放条件
  76. vid.play(); //自动播放
  77. var Timer6 = setInterval(function()
  78. {
  79. if(vid.paused)
  80. {
  81. vid.play(); //自动播放
  82. }
  83. },100); //视频自动播放监听
  84. if(vid.duration) //视频进度条拉到结尾
  85. {
  86. vid.currentTime = vid.duration;
  87. }else{
  88. vid.currentTime = 3600;
  89. }
  90. var Timer4 = setTimeout(function()
  91. {
  92. if(vid.previousSibling) //如果不允许拉进度条
  93. {
  94. vid.parentNode.addEventListener("seeked", function (event) { //禁止寻址监听
  95. event.stopPropagation();
  96. }, true);
  97. vid.parentNode.addEventListener("play", function (event) { //禁止播放监听
  98. event.stopPropagation();
  99. }, true);
  100. if(vid.duration)
  101. {
  102. vid.currentTime = vid.duration;
  103. }else{
  104. vid.currentTime = 3600;
  105. }
  106. vid.currentTime -= 80;
  107. vid.play(); //自动播放
  108. }
  109. },700); //弹窗延迟检测
  110. }else if(fraDoc_2.getElementById("panView")) //如果为ppt任务框架
  111. {
  112. var fraDoc_3 = fraDoc_2.getElementById("panView").contentWindow.document;
  113. var ppt = fraDoc_3.getElementsByTagName("html")[0];
  114. var pptSta = 0x00;
  115. var Timer5 = setInterval(function()
  116. {
  117. ppt.scrollTop = ppt.scrollHeight;
  118. },100); //强制滚动间隔
  119. var Timer7 = setInterval(function()
  120. {
  121. if(ppt.scrollTop - ppt.scrollHeight <= 600) //二者实际最终差542
  122. {
  123. pptSta = (pptSta << 1) + 1;
  124. }else{
  125. pptSta = (pptSta << 1) + 0;
  126. }
  127. if(pptSta % 16 == 0x0F) //如果连续四次都检测到ppt结束
  128. {
  129. clearInterval(Timer5);
  130. clearInterval(Timer7);
  131. if(crt_fra_order == fraArr.length - 1) //如果是最后一个任务点框架
  132. {
  133. document.getElementsByClassName("jb_btn jb_btn_92 fr fs14 nextChapter")[0].click(); //强制下一节
  134. var Timer2 = setTimeout(function()
  135. {
  136. runJs();
  137. },500); //页面刷新等待
  138. }else{
  139. fastFwd(fraArr,crt_fra_order + 1);
  140. }
  141. }
  142. },120); //ppt结束检测
  143. }else if(fraDoc_2.getElementById("frame_content")) //如果为章节检测框架
  144. {
  145. //自动答题代码待添加
  146. if(crt_fra_order == fraArr.length - 1) //如果是最后一个任务点框架
  147. {
  148. document.getElementsByClassName("jb_btn jb_btn_92 fr fs14 nextChapter")[0].click(); //强制下一节
  149. var Timer2 = setTimeout(function()
  150. {
  151. runJs();
  152. },500); //页面刷新等待
  153. }else{
  154. fastFwd(fraArr,crt_fra_order + 1);
  155. }
  156. }else //如果框架类型不明
  157. {
  158. console.log("框架类型不明,自动跳过");
  159. if(crt_fra_order == fraArr.length - 1) //如果是最后一个任务点框架
  160. {
  161. document.getElementsByClassName("jb_btn jb_btn_92 fr fs14 nextChapter")[0].click(); //强制下一节
  162. var Timer2 = setTimeout(function()
  163. {
  164. runJs();
  165. },500); //页面刷新等待
  166. }else{
  167. fastFwd(fraArr,crt_fra_order + 1);
  168. }
  169. }
  170. }
  171.  
  172. function calT5(fraNum)
  173. {
  174. if(fraNum == 0)
  175. {
  176. return 0;
  177. }else if(fraNum == 1)
  178. {
  179. return 100;
  180. }else if(fraNum == 2)
  181. {
  182. return 600;
  183. }else if(fraNum == 3)
  184. {
  185. return 1100;
  186. }else if(fraNum >= 4 && fraNum <= 7)
  187. {
  188. return 1800;
  189. }else
  190. {
  191. return 2500;
  192. }
  193. }

QingJ © 2025

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