ulearning

课程思政网络培训的视频每隔几分钟会暂停播放,这个脚本可以帮你自动(每分钟检测一次)继续播放,还可以跳过非视频的页面(这个功能没有仔细测试),只支持在同一个课程内自动播放,播放结束后跳到下一章节,所以请选择一个学分数很大的课程来挂课。 打开课程之后,你只需要一些些的耐心。

  1. // ==UserScript==
  2. // @name ulearning
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.5.0
  5. // @description 课程思政网络培训的视频每隔几分钟会暂停播放,这个脚本可以帮你自动(每分钟检测一次)继续播放,还可以跳过非视频的页面(这个功能没有仔细测试),只支持在同一个课程内自动播放,播放结束后跳到下一章节,所以请选择一个学分数很大的课程来挂课。 打开课程之后,你只需要一些些的耐心。
  6. // @author laohoo
  7. // @match https://ua.ulearning.cn/learnCourse/learnCourse.html*
  8. // @icon https://www.google.com/s2/favicons?domain=ulearning.cn
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. console.log(Date(), 'Let me go.');
  16. let tiemOut = 1000*60; // 检测间隔时间,默认为一分钟(1000*60)一次
  17. let lists = [];
  18. let vFlag = '';
  19.  
  20. let speed = 4; // 播放的倍速, 我也不知道最大可以是多少,但是别搞太夸张了。
  21.  
  22. let video_list =[];
  23.  
  24. function getPlayList(){
  25. lists = document.querySelectorAll('.page-item div.page-name.cursor');
  26. console.log(lists);
  27. return lists;
  28. }
  29.  
  30. // 中断后再接着播放时,打开所有的章节以便更新视频播放状态,否则影响判断未播放的章节
  31. // 如果没有效的话,麻烦您手动点一下已经播放过的各章标题,让它展开以更新各小节视频的播放状态
  32. function openChapter(){
  33. let chapters = document.querySelectorAll('div.chapter-name.cursor');
  34. console.log(Date(),'chapters:',chapters);
  35. if(chapters){
  36. for(let ch of chapters){
  37. setTimeout(function(){
  38. ch.click();
  39. }, 1000*5);
  40. }
  41. }
  42. }
  43. // 设置播放速度为 1.50X
  44. function setSpeed(){
  45. let speed_button = document.querySelector('.mejs__speed-button button');
  46. console.log(Date(),'speed_button: ',speed_button );
  47. if(speed_button){
  48. if(speed_button.innerText==='1.00x'){
  49. let speed_item = document.querySelector('li.mejs__speed-selector-list-item > input');
  50. speed_item.value = speed;
  51. console.log(Date(),'speed_item: ',speed_item );
  52. if(speed_item){
  53. console.log(Date(), 'set the speed is:' , speed);
  54. speed_item.click();
  55. }
  56. }
  57. }
  58. }
  59.  
  60. // 没有视频的内容跳转到下一页,这个函数有bug,不想改了。
  61. function nextPage(){
  62. let nextBtn = document.querySelector('.next-page-btn');
  63. let step = 2;
  64. console.log(Date(), 'next page.');
  65.  
  66. let btn_hollow = document.querySelector('button.btn-hollow');
  67. if(btn_hollow){
  68. console.log(Date(), 'button.btn-hollow is click.');
  69. btn_hollow.click();
  70. }
  71.  
  72. if(nextBtn){
  73. console.log(Date(), '.next-page-btn is click.');
  74. nextBtn.click();
  75. }
  76. }
  77.  
  78. // 当前视频播放结束后,跳到下一个有视频的页面。
  79. function nextActivePage(){
  80. if(lists.length){
  81. console.log(Date(), 'play lists.');
  82. for(var index in lists){
  83. let iconFont = lists[index].querySelector('.page-icon i.iconfont');
  84. if(iconFont.innerText ===vFlag){
  85. if(!lists[index].classList.contains('complete')){
  86.  
  87. console.log(Date(), 'not complete, not active. ',lists[index]);
  88. lists[index].click();
  89. break;
  90. }
  91. }
  92. }
  93. }
  94. }
  95.  
  96. // 很久没有点击页面的话,会弹出一个暂停框等待确认
  97. function toContinue(){
  98. let pause = document.querySelector('div.modal-operation button.btn-submit');
  99. if(pause){
  100. console.log(Date(),'it is pause, continue...');
  101. pause.click();
  102. }
  103. }
  104.  
  105. setInterval(function(){
  106. try{
  107. let btn_play = document.querySelector('.mejs__overlay-play');
  108. let playStatus = document.querySelector('div.video-progress div.text span');
  109. console.log(Date(), 'btn_play: ',btn_play);
  110. if(lists.length<2){
  111. getPlayList();
  112. openChapter();
  113. }
  114.  
  115. if(!btn_play){
  116. nextPage();
  117. }else{
  118. if(btn_play.style.display!=='none'){
  119. if(playStatus.innerText !='已看完'){
  120. btn_play.click();
  121. console.log(Date(), 'play continue... ');
  122. }else{
  123. nextActivePage();
  124. }
  125. }else{
  126. console.log(Date(), playStatus.innerText);
  127. }
  128. }
  129.  
  130. setSpeed();
  131. toContinue();
  132. }
  133. catch(e){
  134. console.log(Date(), "Error in this userscript: ",e.message);
  135. }
  136. }, tiemOut);
  137.  
  138.  
  139.  
  140. // Your code here...
  141. })();

QingJ © 2025

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