智慧树网课辅助脚本,享受一口气看二十课的畅快体验。
本文旨在讨论研究算法,请勿非法使用,使用者出现任何问题概不负责。本人保留法律追究的权利。
2022年3月24日更新
特性
- 自动 1.5 倍速播放
- 自动静音
- 自动回答网课中弹题
- 自动切换下一节、下一章
- 自动点击之前,会随机等待0~60秒,模拟人类操作延迟
使用方法
- 下载Chrome(理论上只要有控制台的浏览器皆可。)
-
打开智慧树视频播放地址
-
按下F12
-
找到Console
-
输入以下代码后回车
/** * author: 乖乖龙 * description: 自动播放、自动下一集、自动选择视频弹窗题目、自动关闭答题窗口、刷智慧树网课必备 * use-method: 打开智慧树播放课程界面 按F12 -> Console -> 粘贴本代码 ->按回车键 * upadteTime: 2022/3/24 */ var gxkEnable = true; var abnormalStuckDetectionEnable = true; var abnormalStuckDetectionLimit = 10; var autoClosePopUpTest = true; var pauseResume = true; var autoMute = true; var auto15x = true; var autoBQ = true; var autoPlayNext = true; var autoStop = false; var autoStopTime = 30; var copyEnable = true; var autoCopyEnable = true; //以下请勿修改 var timeInterval = 1; // 脚本主循环时间间隔 var stuckCount = 0; // 卡顿计数 var lastProgressBar = ''; // 进度条缓存 var startTime = new Date().getTime(); /** * 获取浏览器名称 * @returns 浏览器名称(如 "Safari") */ function explorerDetect() { if (navigator.userAgent.indexOf("Opera") > -1) { return 'Opera'; } else if (navigator.userAgent.indexOf("Firefox") > -1) { return 'Firefox'; } else if (navigator.userAgent.indexOf("Chrome") > -1) { return 'Chrome'; } else if (navigator.userAgent.indexOf("Safari") > -1) { return 'Safari'; } else if (navigator.userAgent.indexOf("compatible") > -1 && navigator.userAgent.indexOf("MSIE") > -1 && !(navigator.userAgent.indexOf("Opera") > -1)) { return "IE"; } } /** * 异步等待,只阻塞当前脚本调用处函数,不阻塞整个浏览器,默认等待 10 ms * * 调用方法:await sleep() 或 await sleep (1000) * * @param {number} ms 等待的毫秒数 * @returns 一个匿名函数的 Promise */ function sleep(ms = 10) { // 异步等待,只阻塞当前脚本调用处函数,不阻塞整个浏览器 // 调用方法:await sleep() 或 await sleep (1000) return new Promise(function (resolve, reject) { setTimeout(() => { resolve(); }, ms); }) } /** * 获取当前时间 * @returns 当前时间,格式化为:[MM/dd HH:mm:ss] */ function dateTime() { var t = new Date(); return '[' + (t.getMonth() + 1) + '/' + t.getDate() + ' ' + t.getHours() + ':' + t.getMinutes() + ':' + t.getSeconds() + '] '; } /** * 自定义的控制台 log 方法 * @param {String} message 日志内容 */ function log(message) { console.log(dateTime() + '[智慧树助手] ' + message); } /** * 获取未观看列表 * @returns 未观看的网课列表 */ function getNotPlayed() { var video_labels = []; var list = $('.clearfix.video'); if (list.length > 0) { list.each(function (index, elem) { if ($(elem).find('.time_icofinish').length < 1) { if (!$(elem).hasClass('current_play')) { video_labels.push(elem); } } }); } console.log( "更新未看列表,还剩" + video_labels.length + "个视频未完成\n", { "点击展开全部": video_labels } ); return video_labels; } /** * 切换1.5倍速 */ function autoSwitch15x() { if ($("video").length > 0 && $("video")[0].playbackRate != 1.5 && auto15x) { log('切换到1.5倍'); if ($(".speedTab15").length > 0) { $(".speedTab15")[0].click(); } if ($(".speedTab.speedTab15").length > 0) { $(".speedTab.speedTab15")[0].click(); } } } /** * 切换标清 */ function autoSwitchBQ() { if ($(".definiLines .active").length > 0) { if ($(".definiLines .active")[0].className === "line1gq switchLine active" && autoBQ && $(".line1bq.switchLine").length > 0) { log('切换到标清'); $(".line1bq.switchLine")[0].click(); } } } /** * 切换静音 */ function autoSwitchMute() { if ($("video").length > 0) { if ($("video")[0].volume > 0 && autoMute && $(".volumeIcon").length > 0) { log('自动静音'); $(".volumeIcon")[0].click(); } } } /** * 关闭页面加载后的一些“烦人的”弹窗 */ function closeTips() { if ($('.dialog[style!="display: none;"]:has(.dialog-read)').length > 0 && $('.iconguanbi').length > 0) { log("学前必读已关闭"); $('.iconguanbi').click(); } if ($('.dialog-warn').css('display') !== 'none' && $('.el-icon-close').length > 0) { console.log('智慧树警告已关闭', $('.el-icon-close')); $('.el-icon-close').click(); } if ($('#close_windowa').length > 0) { log("已关闭提示弹窗"); $('#close_windowa')[0].click(); } } /** * 关闭弹题测验 */ async function closePopUpTest() { var pop_up = $('.dialog-test'); if (pop_up.length > 0 && autoClosePopUpTest) { //关闭出现的检测题 var topic_item = $('.topic-item'); var guess_answer = parseInt(Math.random() * topic_item.length); topic_item[guess_answer].click(); await sleep(1000); var guess_char = 'ABCD'[guess_answer]; //随机点击一个选项 var answer = $('.answer').children().text(); //选出正确答案 if (answer.indexOf('A') !== -1 && answer.indexOf(guess_char) === -1) { topic_item[0].click(); } else if (answer.indexOf('B') !== -1 && answer.indexOf(guess_char) === -1) { topic_item[1].click(); } else if (answer.indexOf('C') !== -1 && answer.indexOf(guess_char) === -1) { topic_item[2].click(); } else if (answer.indexOf('D') !== -1 && answer.indexOf(guess_char) === -1) { topic_item[3].click(); } await sleep(1000); pop_up.find('div.btn').click(); log( "为您跳过弹题测验," + ((answer === guess_char) ? ("一次蒙对,答案:" + answer) : ("蒙的" + guess_char + ',正确答案:' + answer)) ); } } /** * 检测是否播放完成 */ function progressBarMonitor() { var progress_bar = $('.nPlayTime'); //监控进度条 if (progress_bar.length > 0 && progress_bar.children().length > 0 && autoPlayNext) { var ProgressBar = progress_bar.children('.currentTime').text(); // 跳集条件: // 1. 剩余时间不为 00:00:00 (即视频已成功加载) // 2. 已播放时间与剩余时间相等(即视频已播放完毕) // 3. 右侧目录中正在播放的栏目需要有 time_icofinish 图标(即系统已记录下视频播放完成) // 若以上三个条件中任意一个不满足则不跳集,而是回到视频开头重新开始(或由 stuckDetector() 函数刷新页面) if ((ProgressBar !== '00:00:00') && (ProgressBar === progress_bar.children('.duration').text() && ($('.current_play').find('.time_icofinish').length > 0))) { log("检测到进度条已满"); var next_video = null; if (window.location.href.indexOf("studyh5.zhihuishu.com") !== -1) { next_video = $(getNotPlayed()[0]); } log("已为您自动切换下一集"); next_video.click(); } } } /** * 暂停检测 */ function pauseDetector() { var play_Button = $(".playButton"); if (play_Button.length > 0 && pauseResume) { //点击暂停按钮,将继续播放视频 play_Button.click(); log("继续播放"); } } /** * 卡顿检测 */ function stuckDetector() { if (abnormalStuckDetectionEnable) { var progress_bar = $('.nPlayTime'); if (progress_bar.length > 0) { // 播放器正常加载的情况 var ProgressBar = progress_bar.children('.currentTime').text(); if ($("video").length > 0 && progress_bar.children().length > 0 && abnormalStuckDetectionLimit > 0 && pauseResume) { if (ProgressBar !== lastProgressBar) { if (stuckCount !== 0) { log("已恢复播放,取消页面刷新计划"); } stuckCount = 0; } else { if (stuckCount >= abnormalStuckDetectionLimit) { stuckCount = 0; location.reload(); } else { stuckCount++; log("即将刷新页面…… " + stuckCount + "/" + abnormalStuckDetectionLimit); } } lastProgressBar = ProgressBar; } } else { // 播放器未正常加载的情况 if (stuckCount >= abnormalStuckDetectionLimit) { stuckCount = 0; location.reload(); } else { stuckCount++; log("即将刷新页面…… " + stuckCount + "/" + abnormalStuckDetectionLimit); } } } } /** * 强制允许复制 */ function copyEnabler() { log('强制复制'); function hackItem(item) { item.onpaste = () => true; item.oncontextmenu = () => true; item.onselectstart = () => true; item.ondragstart = () => true; item.oncopy = () => true; item.onbeforecopy = () => true; Object.defineProperty(item, 'onpaste', { get: () => false }) Object.defineProperty(item, 'oncontextmenu', { get: () => false }) Object.defineProperty(item, 'onselectstart', { get: () => false }) Object.defineProperty(item, 'ondragstart', { get: () => false }) Object.defineProperty(item, 'oncopy', { get: () => false }) Object.defineProperty(item, 'onbeforecopy', { get: () => false }) } function hackClass(className) { for (const i of document.getElementsByClassName(className)) { hackItem(i); } } hackClass("subject_describe"); hackItem(document.body); hackItem(document); } /** * 点击题目自动复制 */ function autoCopy() { function _legacyCopy() { log("正在使用传统方法复制"); let tmpInput = document.createElement('input'); $(this).append(tmpInput) tmpInput.value = $(this).text(); tmpInput.focus(); tmpInput.select(); if (document.execCommand('copy')) { document.execCommand('copy'); } tmpInput.blur(); log('复制成功'); $(tmpInput).remove(); showDialog("复制成功!", 0, true, true); $(this).css("background-color", "#ECECEC"); setTimeout(function (elem) { elem.css("background-color", "#FFFFFF"); }, 200, $(this)); } function _autoCopy() { log("题目内容:" + $(this).text()); if (navigator.clipboard && window.isSecureContext) { log("正在使用 navigator clipboard api 进行复制操作"); navigator.clipboard.writeText($(this).text()) .then(() => { log('复制成功'); showDialog("复制成功!", 0, true, true); $(this).css("background-color", "#ECECEC"); setTimeout(function (elem) { elem.css("background-color", "#FFFFFF"); }, 200, $(this)); }) .catch(err => { log("navigator clipboard api 复制时出错,将使用传统方法进行复制") _legacyCopy(); }) } else { _legacyCopy(); } } $('.subject_describe').on("click", _autoCopy); $('.smallStem_describe').on("click", _autoCopy); } /** * 返回学堂 */ function backToMenu() { if ($('.back').length > 0) { $('.back').click() } } var dialog_number = 0; // 弹窗编号 var dialog_timeout = 5; // 弹窗自动关闭倒计时 /** * 显示提示信息弹窗 * @param msg 弹窗内消息内容 * @param timeout 弹窗自动收起的超时时间(秒),默认为 3,最小为 1 * @param disable_header 不显示对话框标题栏,默认为 false * @param disable_footer 不显示对话框按钮栏,默认为 false */ function showDialog(msg, timeout = 3, disable_header = false, disable_footer = false) { msg = msg || "默认消息内容"; dialog_timeout = timeout - 1; var dialogId = { DialogContent: getRandString(getRandInt(5, 20)), DialogCloseButton: getRandString(getRandInt(5, 20)), DialogConfirmButton: getRandString(getRandInt(5, 20)), Dialog: getRandString(getRandInt(5, 20)), } var _html = ` <div class="el-dialog__body"> <div class="operate-dialog-1" id="` + dialogId.DialogContent + `"> <p>` + msg + `</p> </div> </div> `; if (!disable_header) { _html = ` <div class="el-dialog__header"> <span class="el-dialog__title">提示</span> <button type="button" aria-label="Close" class="el-dialog__headerbtn" id="` + dialogId.DialogCloseButton + `"> <i class="el-dialog__close el-icon el-icon-close"></i> </button> </div> ` + _html; } if (!disable_footer) { _html += ` <div class="el-dialog__footer"> <span class="dialog-footer"> <button type="button" class="el-button btn el-button--primary" id="` + dialogId.DialogConfirmButton + `"> <span id="confirm-btn">我知道了 (` + dialog_timeout + `)</span> </button> </span> </div>` } _html = ` <div class="el-dialog__wrapper dialog-tips" style="z-index: 2001;"> <div role="dialog" aria-modal="true" aria-label="提示" class="el-dialog" style="margin-top: 15vh;" id="` + dialogId.Dialog + `"> ` + _html + ` </div> </div> ` $('#app').before(_html); /** * 关闭弹窗 */ function closeDialog() { $('.dialog-tips').remove() } $('#' + dialogId.Dialog).css('width', '400px') $('#' + dialogId.DialogContent).css({ "margin": "0 20px", "padding": "10px 0px 0px" }); $('#' + dialogId.DialogCloseButton).on('click', closeDialog); $('#' + dialogId.DialogConfirmButton).on('click', closeDialog); /** * 超时后自动关闭弹窗 */ function countDown() { if (dialog_timeout > 0) { $('#confirm-btn').text('我知道了 (' + dialog_timeout + ')') window.setTimeout(countDown, 1000); dialog_timeout--; } else { closeDialog(); } } window.setTimeout(countDown, 1000); } /** * 生成随机字符串 * @param len: 字符串长度 * @returns `string` */ function getRandString(len = 10) { const str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; let ret = ""; for (let i = 0; i < len; i++) { ret += str.charAt(Math.floor(Math.random() * str.length)); } return ret } /** * 生成范围内随机数 * @param min: 最小值 * @param max: 最大值 * @returns `number` */ function getRandInt(min, max) { return parseInt(Math.random() * (max - min + 1) + min, 10) } (function () { 'use strict'; /** * 一些仅在加载完成后执行一次的功能 */ function oneShot() { if (window.location.href.indexOf("onlineexamh5new.zhihuishu.com") !== -1 && (window.location.href.indexOf("dohomework") !== -1 || window.location.href.indexOf("doexamination") !== -1)) { //测试题 if (autoCopyEnable) { setTimeout(alert, 1000, '点击题目可以一键复制噢'); var autocp = setInterval(function () { if ($('.subject_describe').length > 0) { autoCopy(); log('自动复制已启用'); clearInterval(autocp); } }, 1000); } if (copyEnable) { copyEnabler(); } } if (explorerDetect() === 'Safari' && window.location.href.indexOf("studyh5.zhihuishu.com") !== -1 && autoMute == false) { window.setTimeout(alert, 1000, "由于Safari的限制,不允许视频自动播放,因此使用此脚本的自动播放功能时必须启用自动静音功能"); } } /** * 主循环 */ function mainLoop() { try { if (window.location.href.indexOf("studyh5.zhihuishu.com") !== -1 && gxkEnable) { //共享课 if ($(".controlsBar").length > 0) { //log("视频正常加载"); autoSwitch15x(); autoSwitchBQ(); autoSwitchMute(); closeTips(); closePopUpTest(); progressBarMonitor(); pauseDetector(); stuckDetector(); if (autoStop && (new Date().getTime() - startTime > autoStopTime * 60 * 1000)) { backToMenu(); } } else { //log("视频未加载"); stuckDetector(); } } } catch (err) { console.log(dateTime(), err.message); } } window.onload = window.setInterval(mainLoop, (timeInterval * 1000)); oneShot(); log("启动成功"); })();
6.完事儿。
2020年10月6日更新(已失效)
由于新版智慧树没有了“返回旧版”的按钮,于是只好自己重新写一个咯。(哼)
特性
- 自动 1.5 倍速播放
- 自动静音
- 自动回答网课中弹题
- 自动切换下一节、下一章
- 自动点击之前,会随机等待0~60秒,模拟人类操作延迟
- 视频左上角显示是否开启脚本
使用方法
- 下载Chrome(理论上只要有控制台的浏览器皆可。)
-
打开智慧树视频播放地址
-
按下F12
-
找到Console
-
输入以下代码后回车
/** * author: 乖乖龙 * description: 自动播放、自动下一集、自动选择视频弹窗题目、自动关闭答题窗口、刷智慧树网课必备 * use-method: 打开智慧树播放课程界面 按F12 -> Console -> 粘贴本代码 ->按回车键 * use-method: 视频左上方出现一个图标点击图标开始刷课 显示‘已开’脚本开始监听 再次点击图标关闭 * upadteTime: 2020/10/6 */ //定时器 var timer; //++++++++ 以下为可设置的参数 ++++++++++ //初始状态 0 开启 1关闭 var startstatus = 0; //次数 var number = 0; //视频播放到100%时候切换下一个 var percent = 100; //速率 var speed = "1.5"; //静音 var vol = true; //答题?不答题将会移除答题框 var answer = true; //++++++++ 可设置的参数结束 ++++++++++ //查找节点 var tips = $(".video-study"); //创建新节点 var option = $("<div>"); //添加样式 var args = { "color":"DarkOrange", "text-align":"center", "line-height":"90px", "font-size":"30px", "background-image": "url(data:image/jpg;base64,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)", "background-repeat": "no-repeat", "background-size": "100%", "width": "90px", "height": "90px", "border-radius": "45px", "position":"fixed", "left":"60px", "top":"200px", "z-index":"999" }; option.css(args); //添加点击事件 option.attr("onClick","StartOrStop()"); option.attr("id","rains"); option.text("Rains"); //插入节点到页面 tips[0].parentNode.insertBefore(option[0],tips[0]); //函数 function start(){ if(number % 200 == 0){ console.clear(); } number += 1; //获取视频速率 var speedSpan = $(".speedBox>span").text().replace("X ",""); if(speedSpan != speed){ switch(speed){ case "1.0": $("div[rate='1.0']").click(); break; case "1.25": $("div[rate='1.25']").click(); break; case "1.5": $("div[rate='1.5']").click(); break; } } //判断音量 var volume = parseInt($(".volumeBox .passVolume")[0].style.height); if(volume > 0 && vol == true){ $(".volumeIcon").click(); } //获取进度条 var pass = $(".passTime"); //获取答题框状态 var dialog = $(".el-dialog__wrapper.dialog-test")[0]; if(dialog != undefined){ if(answer == false){ //移除答题框 $(".v-modal").remove(); $(".el-dialog__wrapper.dialog-test")[0].remove(); $("body").removeClass("el-popup-parent--hidden"); }else{ //如果是单选题或者判断题选择一个答案否则移除答题框 if($(".title-tit").text() == "【单选题】" || $(".title-tit").text() == "【判断题】"|| $(".title-tit").text() == "【多选题】"){ //选择选项的第一个用于获取正确答案 $(".topic-list .topic-option-item")[0].click(); //取消已经选择的 $(".topic-list .topic-option-item").each(function(){ if($(this).hasClass("active")){ $(this).click(); } }) //选择答案 let answer = $(".answer span").text().split(","); $.each(answer,function(index,value){ let option = value.charCodeAt() - 65; $(".topic-list .topic-option-item")[option].click(); }); //延时关闭弹窗 setTimeout("$(\".el-dialog__wrapper.dialog-test .el-dialog__footer .dialog-footer .btn\")[0].click();",1000); }else{ //如果不是这3个选项移除答题框以后弹框将不会出现 $(".v-modal").remove(); $(".el-dialog__wrapper.dialog-test")[0].remove(); $("body").removeClass("el-popup-parent--hidden"); } } let play = $(".bigPlayButton.pointer")[0]; //如果暂停继续播放 if(play.style.display == "block"){ play.click(); } }else{ let play = $(".bigPlayButton.pointer")[0]; //如果暂停继续播放 if(play.style.display == "block"){ play.click(); } } //判断播放进度是否大于83% if(parseInt(pass[0].style.width) > percent){ //切换下一个视频 $("#nextBtn").click(); } console.log("执行第"+ number + "次"); } function StartOrStop(){ var rains = $("#rains"); //获取播放状态 var play = $(".bigPlayButton.pointer")[0]; if (startstatus == 0){ //开始脚本 timer = setInterval(start, 3000); //已经暂停 点击开始按钮 block时视频播放暂停 if(play.style.display == "block"){ play.click(); } startstatus = 1; rains.text("已开"); rains.css("color","blue"); console.log("刷课开始执行"); }else if (startstatus == 1) { //停止脚本 clearInterval(timer); //已经播放 暂停播放 if(play.style.display == "none"){ play.click(); } startstatus = 0; rains.text("已关"); rains.css("color","red"); console.log("刷课已停止"); } } //执行监听方法 默认填入代码后开启脚本 StartOrStop();
6.看到
视频左上角出现“已开”
,说明操作正确。7.此时就可以愉快的奔放咯。
2019年11月7日更新(已失效)
有同学反映最近脚本没法用了,这是由于智慧树进行了改版而脚本还没改版。然而我本人又懒得重新写一个新的脚本,所以想到了一个折中的办法 嘻嘻~
进入智慧树的在线学习页面,点击右上角返回旧版,再根据下面的流程做一遍即可继续学习奔放。
特性
- 自动 1.5 倍速播放
- 自动静音
- 自动切换流畅画质(摸鱼时网络更加通畅)
- 自动关闭网课中弹题
- 自动切换下一节、下一章
- 自动点击之前,会随机等待0~60秒,模拟人类操作延迟
使用方法
- 下载Chrome(理论上只要有控制台的浏览器皆可。)
-
打开智慧树视频播放地址
-
按下F12
-
找到Console
-
输入以下代码后回车
(function () { const MAX_DELAY = 60 // 切课时的最大延迟,单位:秒 const sleep = (time) => new Promise((resolve) => setTimeout(resolve, time)) const start = async function () { console.log('智慧树助手已启动') while (true) { console.log('正在检查') const delay = Math.floor(Math.random() * MAX_DELAY * 1000) + 1000 if (!/1\.5/.test($('.speedBox').attr('style'))) { console.log('提升到1.5倍速') $('.speedTab15').click() } if ($('.volumeBox').find('.passVolume').width() != 0) { console.log('静音') $('.volumeIcon').click() } if ($('.playButton').length > 0) { console.log('点击播放') $('.playButton').click() } if ($('.popbtn_cancel')[0]) { console.log('发现弹题,将在' + delay / 1000 + ' 秒后点击关闭') await sleep(delay / 2) const iframe = document.getElementById('tmDialog_iframe').contentWindow iframe.document.querySelector('.answerOption label').click() await sleep(delay / 2) $('.popbtn_cancel').click() } if ($('.current_play').find('.progressbar').width() == $('.current_play').find('.progressbar_box').width()) { console.log('本节完成,' + delay / 1000 + ' 秒后将切到下一课') await sleep(delay) $('.current_play').nextAll('.video')[0].click() } await sleep(1000) } } start() }())
6.看到
智慧树助手已启动
,说明操作正确。7.此时就可以愉快的奔放咯。
注意
本文旨在讨论研究算法,请勿非法使用,使用者出现任何问题概不负责。本人保留法律追究的权利。