您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
童程xuexi见面课挂机脚本、童程tmooc去掉视频暂停按钮脚本
// ==UserScript== // @name 童程xuexi、tmooc脚本 // @namespace http://tampermonkey.net/ // @version 1.4.7-beat // @description 童程xuexi见面课挂机脚本、童程tmooc去掉视频暂停按钮脚本 // @author zjp007 // @match *://xuexi.tmooc.cn/* // @match *://code.tmooc.cn/* // @match *://robot.tmooc.cn/* // @match *://pdf.ajiatech.com/* // @grant none // ==/UserScript== (function() { var videoLocalSpeed = 1; 'use strict'; console.log("童程脚本") // 添加自定义样式到<head>标记中 function loadStyle(css) { var style = document.createElement('style'); style.type = 'text/css'; style.rel = 'stylesheet'; style.appendChild(document.createTextNode(css)); var head = document.getElementsByTagName('head')[0]; head.appendChild(style); } //自定义样式 function addCss(){ // 自定义倍速样式 var css = '.add-speed-entry{font-size:inherit;' + 'color:inherit;line-height:inherit;background:transparent;' + 'outline:none;width:100%;border:none;text-align:center;}'; css += '.add-speed-entry[type=number]{-moz-appearance:textfield;user-select:initial;' +'touch-action:manipulation;-webkit-appearance:none;text-decoration:none;overflow:visible;' +'}'; css += 'input::-webkit-outer-spin-button,' +'input::-webkit-inner-spin-button{' +'-webkit-appearance: none !important;' +'margin: 0;}' css += '.removeLi{position:absolute;right:8px}'; css += '.removeLi:hover{color:red;}'; // 去暂停按钮 css += '#replaybtn{display:none !important;}'; // 去水印 css += 'div.jw-marquee.jw-marquee-extension{display:none !important;}'; // 显示当前课次样式 css += '.video-cont h2{display:inline-block;}'; css += '.lesson{position: relative;display: inline-block;float: right;font-weight: bold;right: 20%;}'; // 倍速模式 css += '.switch-wrap input[type=checkbox]{height: 0px;width: 0px;visibility: hidden;margin:0;padding:0;}'; css += '.switch-wrap label{display: inline-block;width: 52px;height: 32px;border: 1px solid #DFDFDF;outline: none;border-radius: 16px;box-sizing: border-box;background: #FFFFFF;cursor: pointer;transition: border-color .3s,background-color .3s;vertical-align: middle;position: relative;}'; css += '.switch-wrap label::before {content: "";position: absolute;top: 0;left: 0;transition: transform 0.3s;width: 30px;height: 30px;border-radius: 50%;box-shadow: 0 1px 3px rgba(0,0,0,0.4);background-color: #fff;}'; css += '.switch-wrap input:checked + label {background: #33DB70;}'; css += '.switch-wrap input:checked + label:before {transform: translateX(20px);}'; css += '.video-list-box h2,.switch-wrap{display:inline-block;}'; css += '.video-list-box h2{width: 80%;}'; loadStyle(css) } // 隐藏TTS阶段考试的答案和解析 function addCssFortts(){ var css = 'input[type="radio"]{display:none !important;}'; css += 'input[type="checkbox"]{display:none !important;}'; css += 'div.exam_result{display:none !important;}'; // 试题代码格式 css += 'xmp{line-height: 1.4em;' + 'width: 98%;' + 'padding: 5px;' + 'font-size: 110%;' + 'font-family: Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;' + 'white-space: pre-wrap;' + 'word-break: break-all;' + 'word-wrap: break-word;}' loadStyle(css) } // 复制下载连接样式 function aDownloadCss(){ var css = '.copyDiv{position: fixed;right: 10px;bottom: 120px;' +'width: 54px;background: white;border-radius: 4px;' +'overflow: hidden;}'; css += '.copyDiv:hover{background: #1a8bc0;}'; css += '.copyDiv a{font-size: 16px;display: inline-block;' + 'width: 54px;height: 54px;text-align: center;' + 'line-height: 54px;}'; css += '.copyDiv a:hover{color: white}'; css += '#top1{margin: 0px 220px !important}' css += '.catalogDiv{' + 'background: #2cccc6;' + 'border-radius: 30px;' + 'position: fixed;' + 'left: -218px;' + 'top: 170px;' + 'padding: 18px 5px;' + 'height: 12%;transition: left 0.6s ease;' + '}' + '.catalogDiv:hover{left: 0px;transition: left 0.6s ease;}'; css += 'input.search{height: 36px;' + 'padding: 0 10px;' + 'border: 1px solid #d6d6d6;' + 'line-height: 36px;' + 'font-size: 14px;}' + 'button.srchBtn{height: 37px;}' loadStyle(css); } // 更改TTS考试标题 function changeTtsTitleName(){ var titleTxt = $("title").text(); titleTxt = titleTxt.substring(titleTxt.indexOf("Level")) + " 考试"; $("#exam_title").text(titleTxt); } // TTS问题加上括号 function changeQuestionTitle(){ var questionDomArr = $("div.question xmp"); for(var i = 0;i<questionDomArr.length;i++){ var questionTxt = $(questionDomArr[i]).text(); $(questionDomArr[i]).text(questionTxt + " ( ) "); } } // 打印答案到控制台上 function printTTSAnswer(){ var answerDomArr = $("div.exam_result"); for(var i = 0;i<answerDomArr.length;i++){ var count = ""; var answerDom = $($(answerDomArr[i]).find("p")[0]); var answerTxt = answerDom.text(); if(answerTxt == "" || answerTxt == '' || answerTxt == null) { $(answerDomArr[i]).remove(); continue; } if (i<9){ count += "0" + (i+1); }else{ count += (i+1); } // 答案格式["正确答案:A"] answerTxt = count + " : " + answerTxt.substring(5) + "\n"; $(answerDomArr[i]).text(answerTxt); } console.log(answerDomArr.text()) } // 获取所有下载资料的链接 function getDownloadStr(){ var downloadStr = ""; // 所有a标签 var aSumList = $("a.class-enter"); // 存储下载资料的a标签 var aDownloadList = []; for(var i = 0;i<aSumList.length;i++){ var aHref = $(aSumList[i]).attr('href'); if (aHref.indexOf('html') < 0){ aDownloadList.push(aSumList[i]); downloadStr += encodeURI(aHref) + "\n"; } //name = aHref.substring(aHref.lastIndexOf('/') + 1); } console.log(aDownloadList); return downloadStr; } // 获取所有下载资料的链接 function getDownloadList(){ var downloadList = []; // 所有a标签 var aSumList = $("a.class-enter"); // 存储下载资料的a标签 var aDownloadList = []; for(var i = 0;i<aSumList.length;i++){ var aHref = $(aSumList[i]).attr('href'); if (aHref.indexOf('html') < 0){ aDownloadList.push(aSumList[i]); downloadList.push(encodeURI(aHref)); } } return downloadList; } function downFiles(wordArr){ wordArr.forEach(function(item,index){ // 拼接成后端定义好的单个文件的下载的路径(根据实际情况) var path = item if (!(path.indexOf('.zip') || path.indexOf('.rar') || path.indexOf('.7z'))){ return true; } //使用了闭包,返回的函数能够使用外部的path var timer1 = setTimeout(function(path){ return function(){ //定义一个看不见的iframe var iframe =$("<iframe class='downloadIfream' src='"+path+"' style='height:0;display:none'></iframe>") $("body").append(iframe) var timer2 = setTimeout(function(){ iframe.remove() clearTimeout(timer2) },5000) //这个就根据实际情况定义一下延时删除添加的iframe,不删除也问题不大 clearTimeout(timer1) } }(path), 1000 * index) //每隔1s插入一个iframe }) } function printDownloadHref(){ // 参考元素class名 var domClassName = ".footer"; waitElement(domClassName).then(function(){ var btnStr = '<button id="copyBtn">复制下载连接</button>'; var downStr = '<button id="downBtn">全部下载</button>'; $(domClassName).prepend(btnStr); $(domClassName).append(downStr); $("#copyBtn").on('click', function(){ var downloadStr = getDownloadStr(); copyText(downloadStr); alert("复制下载链接成功"); }); $("#downBtn").on('click', function(){ var wordArr = getDownloadList(); downFiles(wordArr); }); }); var bottomDomStr = ".fixed-box-x"; waitElement(bottomDomStr).then(function(){ var btnStr = '<div class="copyDiv">' +'<a href="#copyBtn">END</a>' +'</div>'; $(bottomDomStr).before(btnStr); }); } // 给课程a标记添加当前课次 function addAHref(){ var Lessons = $(".class-video-cont"); /*if (Lessons.length <= 0){ Lessons = $($("div.stage.jiqiren")[0]).find("li"); }*/ for (var i = 0;i<Lessons.length;i++){ var liDom = $(Lessons[i]); var leftA = liDom.find("a.class-name"); var rightA = $(liDom.find("a.class-enter")[0]); var lessonTxt = leftA.text(); var lessonHref = leftA.attr("href"); if (lessonHref.indexOf("Lesson") >= 0){ return } var lastHref = lessonHref + "?Lesson=" + lessonTxt; leftA.attr("href", lastHref); rightA.attr("href", lastHref); } } function touchSearch(){ var KC = $("input.search").val(); if (KC != '' && KC != undefined){ var locationHref = window.location.href; if (locationHref.indexOf('#') >= 0){ locationHref = locationHref.split('#')[0] } window.location.href = locationHref + '#' +KC; } } // 添加搜索 function addCatalog(){ $($("div.class span")[0]).remove() if ($("div.catalogDiv").length==0){ var catalogHTML = '<div class="catalogDiv">' +'<input type="text" placeholder="请输入课时(整数)" class="search">' +'<button class="srchBtn">搜索</button>' +'</div>' $("#top1").append(catalogHTML) } var lessonDoms = $(".class-video li"); for (var i = 0;i<lessonDoms.length;i++){ if($(lessonDoms[i]).attr("id")==undefined){ $(lessonDoms[i]).attr("id",i+1) } } $("button.srchBtn").on("click",function(){ touchSearch(); }) $("input.search").keyup(function(e){ if(e.keyCode == 13){ touchSearch(); } }) } function changeAHref(){ waitElement("a.class-name").then(function(){ // 视频页面显示课次信息 addAHref(); // 课程库添加搜索框 addCatalog(); }); $("li").on("click", function(){ waitElement("a.class-name").then(function(){ // 视频页面显示课次信息 addAHref(); // 课程库添加搜索框 addCatalog(); }); }) } // 视频显示当前课次(课程名称) function getLessons(){ waitElement("div.video-cont").then(function(){ var currentUrl = window.location.href; if (currentUrl.indexOf("Lesson") >= 0){ var urlAndParamArr = currentUrl.split("?"); if (urlAndParamArr.length >= 2){ var params = urlAndParamArr[1].split("="); if (params.length >= 2){ var lessonTxt = decodeURI(params[1]); var lessonHtml = '<h2 class="lesson">' + lessonTxt + '</h2>'; $("div.video-cont h2").after(lessonHtml); } } } }); } // 等待元素加载成功或取消的函数 function waitElement(selector, times, interval, flag=true){ var _times = times || -1, // 默认不限次数 _interval = interval || 500, // 默认每次间隔500毫秒 _selector = selector, //选择器 _iIntervalID, _flag = flag; //定时器id return new Promise(function(resolve, reject){ _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); reject(); } _times <= 0 || _times--; //如果是正数就 -- var _self = $(_selector); //再次选择 if( (_flag && _self.length) || (!_flag && !_self.length) ) { //判断是否取到 clearInterval(_iIntervalID); resolve(_iIntervalID); } }, _interval); }); } // 复制文本到剪切板 function copyText(text) { //var textarea = document.createElement("input");//创建input对象 var textarea = document.createElement("textarea");//创建input对象 var currentFocus = document.activeElement;//当前获得焦点的元素 document.body.appendChild(textarea);//添加元素 textarea.value = text; textarea.focus(); if(textarea.setSelectionRange) textarea.setSelectionRange(0, textarea.value.length);//获取光标起始位置到结束位置 else textarea.select(); try { var flag = document.execCommand("copy");//执行复制 } catch(eo) { var flag = false; } document.body.removeChild(textarea);//删除元素 currentFocus.focus(); return flag; } // 获取cookie值 function getCookie(name) { var prefix = name + "=" var start = document.cookie.indexOf(prefix) if (start == -1) { return null; } var end = document.cookie.indexOf(";", start + prefix.length) if (end == -1) { end = document.cookie.length; } var value = document.cookie.substring(start + prefix.length, end) return unescape(value); } // 将字符串分隔为数组 function splitStrToArray(str, splitStr){ var returnArray = []; if (str != undefined && str != null && str != ''){ returnArray = str.split(splitStr); } return returnArray } // 根据浏览器存储的值初始化倍速按钮 function initSpeedBtn(ulDom){ // 登录用户名 var cookieName = getCookie("loginName"); // 获取存储的倍数值 var speedStorge = localStorage.getItem(cookieName); var userSpeedArry = splitStrToArray(speedStorge, ","); if (userSpeedArry != null && userSpeedArry != '' ){ for (var m = userSpeedArry.length-1;m >=0;m--){ ulDom.prepend('<li data-sp="' + userSpeedArry[m] + '" class="" >' + userSpeedArry[m] + '倍<i class="removeLi">×</i></li>') } }else{ ulDom.prepend('<li data-sp="2.5" class="" >2.5倍<i class="removeLi">×</i></li>') ulDom.prepend('<li data-sp="3" class="" >3倍<i class="removeLi">×</i></li>') } } // 初始化video播放速度 function initVideoSpeed(){ // 等待视频video加载完成后进行设置倍速 waitElement("video").then(function(){ if(! $("#switch").is(":checked")){ // 缓冲时间 var count = 5; var initVideoSpeedFlag = setInterval (function(){ var currentSpeed = $("video")[0].playbackRate; var videoStorge = 1; $("video")[0].playbackRate=1; // 设置视频倍速 $("video")[0].playbackRate=videoStorge; // 设置显示当前倍速 var speedLi =$("ul").find('li[data-sp="' + videoStorge +'"]'); $("ul.ccH5spul li").removeClass("selected"); speedLi.addClass("selected"); var speedText = speedLi.text(); if(speedText.indexOf("×") > -1){ speedText = speedText.substring(0,speedText.length-1); } $("span.ccH5sp").text(speedText) if (currentSpeed == videoStorge){ count--; if (count<=0){ clearInterval(initVideoSpeedFlag); } } },1000); }else{ // 缓冲时间 var count = 5; var initVideoSpeedFlag = setInterval (function(){ // 获取存储的倍数值 var videoStorge = Number(localStorage.getItem("codeVideoSpeed")); var currentSpeed = $("video")[0].playbackRate; // console.log("videoStorge : " + videoStorge) // console.log("currentSpeed : " + currentSpeed) if (videoStorge != null && videoStorge != ''){ // 设置视频倍速 $("video")[0].playbackRate=videoStorge; // 设置显示当前倍速 var speedLi =$("ul").find('li[data-sp="' + videoStorge +'"]'); $("ul.ccH5spul li").removeClass("selected"); speedLi.addClass("selected"); var speedText = speedLi.text(); if(speedText.indexOf("×") > -1){ speedText = speedText.substring(0,speedText.length-1); } $("span.ccH5sp").text(speedText) }else{ $("video")[0].playbackRate=1; } if (currentSpeed == videoStorge){ count--; if (count<=0){ clearInterval(initVideoSpeedFlag); } } },1000); } }) } // 存储倍速到 function saveSpeedStorge(){ // 登录用户名 var cookieName = getCookie("loginName"); var data = ""; var liArray = $("ul.ccH5spul li"); if(liArray.length > 0){ var liLength = liArray.length; var count = 1; while (liLength > 6){ var li = $(liArray[count]); data += li.attr("data-sp") + ","; count++; liLength--; } } data = data.substring(0,data.length-1) localStorage.setItem(cookieName,data) } // 点击继续学习方法 function clickStudyBtn(){ var timeFlag = setInterval (function(){ //var dvWarningView = document.getElementById("dvWarningView"); var dvWarningView = $("#dvWarningView"); if(dvWarningView != null && $(dvWarningView).find("input") != null){ // 点击继续学习 // dvWarningView.find("input").click(); $("#reStartStudy").click(); $("#reStartStudy").mousedown(); $("#reStartStudy").mouseup(); } },5000); } // 去除不能复制粘贴限制 function removeCannotPaste(){ var count = 6; var timeFlag = setInterval (function(){ // 压缩的js脚本,去除网页限制 (function(c){function e(a){var b=a.document,f=a.jQuery,g=function(a){h.forEach(function(b){a["on"+b]=null;f&&f(a).unbind(b);try{/frame/i.test(a.tagName)&&e(a.contentWindow)}catch(c){}})};[a,b].forEach(g);a=0;for(var b=b.all,c=b.length;a<c;a++){var d=b[a];d&&1===d.nodeType&&g(d)}}var h="contextmenu dragstart mouseup copy beforecopy selectstart select keydown".split(" ");e(c)})(window); count--; if (count <= 0){ clearInterval(timeFlag); } },1500); } // 添加高倍速选择,有延时 function addVideoSpeed(){ var timeFlag = setInterval (function(){ // 部分视频不会重新加载整个页面,需要进行判断 // 已经添加自定义倍速的页面,不再进行添加 var liArray = $("ul.ccH5spul li"); if (liArray.length <= 5){ var ulDom = $("ul.ccH5spul"); initSpeedBtn(ulDom); var mySelf = '<li id="speeedLi" class="" >'+ '<i class="addIDom" style="display: inline; onmouseover">+</i>' + '<input id="addSpeedInput" class="add-speed-entry" type="number" max="16" step="0.5" title="增加新的倍数值" min="3.5" style="display: none;"></li>'; ulDom.prepend(mySelf); // 元素事件绑定 eventBind(); console.log("speed add"); } if (liArray.length > 5){ clearInterval(timeFlag); } },1000); waitElement(".video-list-box").then(function(){ var btnStr = '<div class="switch-wrap">' +'<input type="checkbox" id= "switch">' +'<label for="switch"></label>' +'</div>'; if ($("#switch").length <= 0){ $(".video-list-box h2").after(btnStr); } }); waitElement("video").then(function(){ $("video").get(0).addEventListener("ended",function(){ if($("video").width() <= 720 ){ return; } setTimeout(function(){ $(".ccH5FullsBtn").click(); },30) },false); }); } // liClickFun function speedBtnFun(liDom){ $("ul.ccH5spul li").removeClass("selected") $(liDom).addClass("selected"); var speedText = $(liDom).text(); if(speedText.indexOf("×") > -1){ speedText = speedText.substring(0,speedText.length-1); } $("span.ccH5sp").text(speedText) console.log($(liDom).attr("data-sp")); var speedStr = $(liDom).attr("data-sp"); localStorage.setItem("codeVideoSpeed",speedStr); $("video")[0].playbackRate=Number(speedStr); // videoLocalSpeed = Number($(liDom).attr("data-sp")); } // 事件绑定 function eventBind(){ //高倍速按钮回车事件绑定 $('#addSpeedInput').bind('keypress', function(event) { if (event.keyCode == "13") { event.preventDefault(); var videoSpeed = $('#addSpeedInput').val(); //回车执行添加倍速 $('#addSpeedInput').parent().after('<li data-sp="' + videoSpeed + '" class="">' + videoSpeed + '倍<i class="removeLi">×</i></li>'); // 给新增的li(第二个li)添加点击事件 $($("ul.ccH5spul li")[1]).click(function(){ speedBtnFun(this); }); // 删除自定义倍速 var removeIbtn = $("i.removeLi"); $(removeIbtn[0]).click(function(){ $(this).parent().remove(); saveSpeedStorge(); }) saveSpeedStorge(); } }); // 给倍速按钮添加点击事件绑定(样式切换,视频速度切换) var liArray = $("ul.ccH5spul li"); if(liArray.length > 0){ for (var i = 0;i < liArray.length;i++){ var li = $(liArray[i]); if(li.attr('data-sp') != undefined){ li.click(function(){ speedBtnFun(this); }); } } } // 右侧视频列表,点击后会重新加载视频元素,重新添加倍速按钮 var rightUlArray = $("ul.video-list li"); if (rightUlArray.length <= 0){ // robot.tmooc.cn适配 rightUlArray = $("#video-list li"); } if(rightUlArray.length > 0){ for (var j = 0;j < rightUlArray.length;j++){ var rightLi = $(rightUlArray[j]); rightLi.click(function(){ addVideoSpeed(); // 初始化video播放速度 initVideoSpeed(); }); } } // 给删除i标记绑定事件 var removeIbtn = $("i.removeLi"); if (removeIbtn != undefined && removeIbtn.length > 0){ for (var n = 0;n < removeIbtn.length;n++){ var removeI = $(removeIbtn[n]); removeI.click(function(){ $(this).parent().remove(); saveSpeedStorge(); }); } } // 加号,鼠标移入移出不生效 var addIdom = $("i.addIDom"); // 倍速输入框,鼠标移入移出不生效 var speedInput = $('#addSpeedInput'); // 添加倍速的的li var speeedLiDom = $("#speeedLi"); speeedLiDom.mouseenter(function(){ addIdom[0].style.display="none"; speedInput[0].style.display="inline"; speedInput.attr("autofocus",'true'); }); speeedLiDom.mouseleave(function(){ addIdom[0].style.display="inline"; speedInput[0].style.display="none"; }); } // Your code here... $(function(){ // 去除不能复制粘贴限制 removeCannotPaste(); // 云学堂点击继续学习,每5秒点击一次 if (window.location.href.indexOf('xuexi.tmooc.cn')>-1) { addCss(); clickStudyBtn(); } // 课堂视频网站(童创童创都可以),去暂停按钮,添加自定义倍速 if (window.location.href.indexOf('code.tmooc.cn/web/kids') > -1 || window.location.href.indexOf('robot.tmooc.cn')>-1){ addCss(); addVideoSpeed(); // 初始化video播放速度 initVideoSpeed(); // 显示当前课次 getLessons(); } // TTS阶段性考试去掉答案和解析,代码格式化,打印答案到控制台上 if(window.location.href.indexOf('pdf.ajiatech.com/tctm/kid/QS/result/web/exam/')>-1){ addCssFortts(); changeTtsTitleName(); changeQuestionTitle(); printTTSAnswer(); } if(window.location.href.indexOf('code.tmooc.cn/kidcourse/kids')>-1 || window.location.href.indexOf('robot.tmooc.cn/kidcourse/robot')>-1){ aDownloadCss() // 多课件下载 printDownloadHref() changeAHref(); if(window.location.href.indexOf('robot.tmooc.cn/kidcourse/robot')>-1){ if($("#user").text()=="胡治美"){ $("#user").text("胡章萌") } } } }) })();