思路

  • 一些视频学习网站,在学生观看一段时间后,就自动暂停,防止学生挂机
  • 针对于这个情况,我们可以写一个脚本去处理,从而做到电脑不关机
  • 睡觉的时候,也能够自动播放,就很嗨皮
  • 大致就是,通过setInterval定时检查判断视频状态
  • 并且派发点击事件让视频播放
  • 这样的话,就可以挂机了
其他的视频类网站也是类似的思路...

脚本一

document.querySelector(".btn-play")?.click();

const monitorVideo = () => {
  setTimeout(() => {
    const __video = document.getElementsByTagName("video")[0];
    __video.addEventListener("ended", playNext);
  }, 5000);
};

let todayCnt = 1;
const playNext = () => {
  if (todayCnt > 6) {
    console.log("今天已经学完6集");
    return;
  }

  const list = document.querySelectorAll(".cf-catalog-item1 .cf-catalog-item2");
  let curIdx = 0;
  let curName = list[0].title;
  for (let index = 0; index < list.length; index++) {
    const element = list[index];
    if (element.className.includes("active")) {
      curIdx = index;
      curName = element.title;
    }
  }

  if (++curIdx < list.length) {
    const next = list[curIdx];
    console.log(
      "当前集: " + curName + "已经播放完了\n5s后播放下一集: " + next.title
    );
    next.click();
    setTimeout(() => {
      document.querySelector(".btn-play").click();
      todayCnt++;
      monitorVideo()
    }, 5000);
  } else {
    console.log("您已经学习了全部课程");
  }
};

setInterval(() => {
  const btn1 = document.querySelector(
    ".el-notification .el-notification__closeBtn"
  );
  btn1 && btn1.click();

  const btn2 = document.querySelector(".cf-messagebox-body .enter");
  btn2 && btn2.click();
}, 10000);


monitorVideo()

脚本二

let videoDom = document.querySelector('video')
videoDom.addEventListener('ended', function () { //结束
    nextPlay()
}, false);
function nextPlay() {
    let current = document.querySelector('.cf-catalog-item1 .active')
    let next = current.nextElementSibling
    console.log('当前视频播放完了,2秒后播放下一个');
    setTimeout(() => {
        simulate(next)
        console.log('两秒后播放下一个');
        let videoDom = document.querySelector('video')
        console.log('重新绑定视频结束事件');
        videoDom.addEventListener('ended', function () {
            nextPlay()
        }, false);
        videoDom.play()
    }, 4000);
}
function simulate(dom) {
    dom.dispatchEvent(new MouseEvent('click', {
        bubbles: true,
        cancelable: true,
        view: window,
    }))
}
setInterval(() => {
    let box = document.querySelector('.cf-messagebox-body')
    if (box) {
        console.log('弹框出现,模拟点击按钮,继续刷课');
        let btn = box.querySelector('button')
        simulate(btn)
    } else {
        console.log('弹框未出现,等待之');
    }
}, 5000);

参考文章1:使用js进行智慧树刷课

参考文章2:video标签属性


水冗水孚
1.1k 声望589 粉丝

每一个不曾起舞的日子,都是对生命的辜负