最近放假也是闲得慌,突发奇想想写一个超星的脚本,顺便回顾了一些dom的操作和iframe的相关知识
代码
不废话直接上代码
function start () {
iframe = document.querySelector('iframe').contentWindow.document.querySelectorAll('iframe')[0].contentWindow;
const play = iframe.document.querySelector('.vjs-big-play-button');
play.click();
var pass = iframe.document.querySelector('#video > div.vjs-control-bar > div.vjs-progress-control.vjs-control > div');
if (pass && parseInt(pass.getAttribute('aria-valuenow')) >= 99) document.querySelector('.orientationright').click()
}
setInterval(start, 2000);
这只是一个简单的demo,适用于每页只有一个视频的情况。
如果有的视频中间有答题的话,会继续向后播放,但是哪个题目会一直挂在那里,所以刷完记得再回过来答题。
使用
控制台
嫌麻烦的话,直接浏览器F12,在控制台把代码注入
书签
浏览器插件
目录样式
manifest.json文件配置插件适用的网页,也就是指定域名。
{
"manifest_version": 2,
"name": "刷课",
"version": "1.0",
"description": "刷课",
"content_scripts": [
{
"matches": [
"*://*/*"
],
"js": [
"main.js"
]
}
]
}
main.js中就放上面的代码
打开谷歌浏览器,在扩展程序管理中将文件夹拖进去
其他功能
设置静音
//判断音量并设计静音
let volumeDom = iframe.document.querySelector('div.vjs-volume-bar.vjs-slider-bar.vjs-slider.vjs-slider-vertical')
if (volumeDom) {
var volume = parseInt(volumeDom.getAttribute('aria-valuenow'));
if (volume > 0) iframe.document.querySelector('.vjs-mute-control.vjs-control.vjs-button.vjs-vol-3').click();
}
移除答题框
iframe = document.querySelector('iframe').contentWindow.document.querySelectorAll('iframe') //获取答题框
var dialog = iframe.document.querySelector(".el-dialog__wrapper.dialog-test");
if (dialog != undefined) {
//移除答题框
iframe.document.querySelector(".v-modal").remove();
iframe.document.querySelector(".el-dialog__wrapper.dialog-test")[0].remove(); iframe.document.querySelector("body").removeClass("el-popup-parent--hidden");
}
上面代码是直接移除然后继续往下播放,如果有题库的话可以获取题目文本然后查找题库选取正确答案
设置视频播放速度
iframe = document.querySelector('iframe').contentWindow.document.querySelectorAll('iframe')[0].contentWindow;
let speedArr = iframe.document.querySelectorAll('#video > div.vjs-control-bar > div.vjs-playback-rate.vjs-menu-button.vjs-menu-button-popup.vjs-control.vjs-button > div.vjs-menu > ul > li > span.vjs-menu-item-text')
console.log(speedArr);
for (let index = 0; index < speedArr.length; index++) {
const element = speedArr[index];
const result = element.innerHTML.replace(/X/g, "");
//设置播放速度为2
if (parseInt(result) == 2) {
element.click()
}
}
脚本的话只是实现了一个简单的demo,像有的章节有两个视频或者每个章节有多个页面然后每个页面又有视频这些个情况没有考虑。
然后浏览器插件的实现并没有下太大功夫,可以继续编写插件运行以及一些参数配置的可视化控制界面
等什么时候又闲的慌了再继续捣鼓一下