雨课堂刷课助手

针对雨课堂视频进行自动播放

< Feedback on 雨课堂刷课助手

Review: Good - script works

§
Posted: 12-10-2023

已提交pr,使用MutationObserver代替定时器监听视频切出暂停事件,可以极快恢复视频播放,请检查合并

§
Posted: 12-10-2023

突然发现提交的pr有bug,视频播放完了还会重新自动播放,速度比检测视频状态的定时器快所以视频会无限循环,现在电脑不在身边,建议在监听视频暂停被触发后加一个判断视频是否播放完的逻辑,如果放完了就不模拟点击播放😂还有clearInterval(pauseTimer)这个忘记换了,换成observer.disconnect()就是停止监听

NiuwhAuthor
§
Posted: 12-10-2023

多谢,早上弄了一上午也不知道咋解决这个问题,方便的话可以加大佬一个联系方式吗😍,我更新试着解决了一下。大佬回头可以看一下这个bug解决没。还没发布,在github上

§
Posted: 12-10-2023
Edited: 12-10-2023

多谢,早上弄了一上午也不知道咋解决这个问题,方便的话可以加大佬一个联系方式吗😍,我更新试着解决了一下。大佬回头可以看一下这个bug解决没。还没发布,在github上

因为监听器触发会比定时器快很多,所以在定时器里面改视频播放完毕的FLAG应该不太好,675行加一行判断就行了:

                  if (mutation.type === 'childList' && mutation.target === targetElement && targetElement.innerText === '播放') {
                      const status = playOut();
                      const classStatus = $('#app > div.app_index-wrapper > div.wrap > div.viewContainer.heightAbsolutely > div > div > div > div > section.title')[0]?.lastElementChild?.innerText;
                      if (status || classStatus.includes('100%') || classStatus.includes('99%') || classStatus.includes('98%')) playover = true;
                      if (!playover) document.querySelector('.xt_video_bit_play_btn').click();  // 视频放完了就不模拟点击播放
                  }
§
Posted: 12-10-2023

还是有进入下一节视频之后监听器失效的问题,我再看看😂

§
Posted: 12-10-2023

修好了,这样应该没问题了:

          function observe() {
            if (document.getElementsByClassName('play-btn-tip').length === 0) setTimeout(observe, 100);
            else {
              var targetElement = document.getElementsByClassName('play-btn-tip')[0];
              observer = new MutationObserver(function (mutationsList) {
                for (var mutation of mutationsList) {
                  if (mutation.type === 'childList' && mutation.target === targetElement && targetElement.innerText === '播放') {
                      const status = playOut();
                      const classStatus = $('#app > div.app_index-wrapper > div.wrap > div.viewContainer.heightAbsolutely > div > div > div > div > section.title')[0]?.lastElementChild?.innerText;
                      if (status || classStatus.includes('100%') || classStatus.includes('99%') || classStatus.includes('98%')) playover = true;
                      if (!playover) document.querySelector('.xt_video_bit_play_btn').click();  // 视频放完了就不模拟点击播放
                  }
                }
              });
              var config = { childList: true };
              observer.observe(targetElement, config);
              document.querySelector('.xt_video_bit_play_btn').click(); //防止进入下一章时由于鼠标离开窗口而在视频开始时就暂停导致永远无法触发监听器
            }
          }
NiuwhAuthor
§
Posted: 12-10-2023

ok,已测试可用。十分感谢大佬对代码的贡献。让我也学到了新的强大的api😁.本来都没听说过这个 MutationObserver

Post reply

Sign in to post a reply.