使用TamperMonkey实现慕课网自动播放下一集

本文介绍如何使用TamperMonkey编写自动播放脚本,解决慕课网视频课程自动跳转到下一集的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

最近快实习了,计划把之前学习的一些东西再复习总结下。在慕课网回顾一个MySQL的教学视频时遇到个问题,视频每集都很短,再加上我是2倍速观看,每过一会就得点一下下一集,比较麻烦。就想写个自动播放下一集的脚本,过程中稍微遇到点问题,在这里记录下。MySQL教程的地址为http://www.imooc.com/learn/122

环境

浏览器: FireFox 58.0.4 64位
脚本工具:TamperMonkey4.6.5709 简称TM

基本思路


  1. 定位video标签,和下一节按钮标签,这个标签实质上为一个div标签
  2. video标签的ended属性添加事件监听

可以看到基本的思路还是很简单的,但在实现第2步时,发现无法正确添加事件监听,具体在后面讲到

具体实现

第一步:定位标签

这一步很简单了,按下面的步骤做就好

  1. 打开对应的网址
  2. F12打开FireFox的开发者工具
  3. 点击左上角如下图所示的红色圈部分
  4. 将鼠标移动到视频区域,单击

开发者工具

可以看到页面下方打开的开发者工具已经自动定位到了video标签,如上图黄色圈部分。
可喜可贺的是这个video标签设置了id,可以通过jQuery利用id对它进行定位。

实际的定位video标签的语句为

// 返回一个类似列表的玩意,可以使用索引来获得对应位置的标签,索引从0开始。
$("#video-box-mocoplayer-hls-video_html5_api")[0]

同理,可以得到定位div标签的语句为

$(".J-next-btn")[0]

第二步:添加事件监听

添加事件监听,只需要调用现成的js函数addEventListener(event, function)即可。实际的语句为

// ended属性在播放完前值为false,播放完后为true
$("#video-box-mocoplayer-hls-video_html5_api")[0].addEventListener("ended", function() {$(".J-next-btn")[0].click()});

测试

把整个代码放到开发者工具的控制台执行,由下图可以看到,第二步中给出的代码确实是正确地添加了事件监听的。

测试

移植到TamperMonkey

单击浏览器右上角的黑色TamperMonkey图标,点击添加新脚本...,进入脚本编辑界面。下图是我编辑好之后的界面。

TM编辑界面
整体内容如下:

// ==UserScript==
// @name         Mooc自动下一集
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://www.imooc.com/video/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    $("#video-box-mocoplayer-hls-video_html5_api")[0].addEventListener("ended", function() {$(".J-next-btn").click();});
})();

几点说明

  1. @name 指定脚本的名称
  2. @description 指定脚本的描述信息
  3. @match 指定脚本所匹配的网址,可以使用通配符*来进行全部匹配
  4. 其余项直接默认好了,代码默认是在页面加载完之后运行

测试

保存脚本,刷新教程页面,可以发现浏览器右上角的TamperMonkey图标上显示了一个数字1,点击图标,由下图可以说明刚刚新建的脚本已经加载了。
脚本加载完成

但是从实际上,视频播放完后并不会自动播放下一节。开发者工具也显示video标签并未添加我们自定义的事件监听。如下图所示
事件监听

分析问题成因

同样的代码,在控制台直接输入没有问题,通过TM插入运行就出现了问题。说明代码没有问题,有问题的应该是插入代码的运行时间。也许是插入的代码运行的太早了,运行的时候,video标签还不存在,所以导致添加事件监听失败。

测试

同样的代码,再在控制台输入运行下。不过这次是在页面加载基本完成,而视频还未刷新出来的时候运行。结果如下
标签未找到
可以看到除了视频未加载,其余页面已经加载完成。此时的video标签是找不到的。

解决问题

找到原因之后,解决起来就很方便了。直接让添加事件监听的代码段延迟一段时间后再执行就可以了。这就要用到setTimeout(function,millsecond)函数了。这个函数用于让指定函数fuction延迟millsecond之后执行。这里选择延迟2秒执行就可以了。最终的代码如下:

// ==UserScript==
// @name         Mooc自动下一集
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://www.imooc.com/video/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    setTimeout(function() {$("#video-box-mocoplayer-hls-video_html5_api")[0].addEventListener("ended", function() {$(".J-next-btn").click();});}, 2000);
})();

大功告成,最后测试一下,一切正常。世界和谐。

### 使用 TamperMonkey 实现双融双创页面自动播放 #### 准备工作 为了实现特定页上的自动化操作,如双融双创页面的自动播放,首先需要确保已成功安装并配置好了 Tampermonkey 插件[^1]。 #### 编写或查找合适的 JavaScript 用户脚本 对于希望找到已经编写好的适用于目标站(即双融双创平台)的用户脚本来执行自动播放的任务,可以访问一些知名的用户脚本托管站点来搜索是否有他人分享过类似的解决方案。推荐使用 GreasyFork 进行搜索,因为这里聚集了大量的高质量脚本资源[^2]。 如果未能发现满足需求的现有脚本,则可以根据具体页面结构和个人编程能力尝试自行开发一个简单的用户脚本。下面给出一段基础模板作为参考: ```javascript // ==UserScript== // @name 双融双创视频自动播放 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 自动触发双融双创平台上指定区域内的媒体文件播放 // @author Anonymous // @match *://*.example.com/* // 替换成实际址模式 // @grant none // ==/UserScript== (function() { 'use strict'; function autoPlayVideo(){ var videos = document.querySelectorAll('video'); // 查找所有的<video>标签 Array.from(videos).forEach((vid) => { vid.play().catch(error => console.log(`无法播放 ${vid}`)); }); setTimeout(autoPlayVideo, 5000); // 每隔五秒重新检测一次新的视频元素 } window.addEventListener('load', () => { autoPlayVideo(); }); })(); ``` 这段代码会遍历当前页面内所有 `<video>` 标签,并试图启动它们;同时设置了一个定时器以便于当页面加载更多内容时能够继续处理新增加的多媒体对象。请注意修改 `@match` 行以匹配具体的 URL 地址。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值