您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
实现自动挂机看视频,作业自动做题/共享答案功能
// ==UserScript== // @name 优课在线辅助脚本 // @namespace http://www.qs5.org/?UoocAutoLearn // @version 1.2.181225a // @description 实现自动挂机看视频,作业自动做题/共享答案功能 // @author ImDong // @match *://*.uooconline.com/* // @match *://www1.baidu.com/s?uooc=1&* // @grant none // ==/UserScript== (function (window, $) { // 创建对象 var UoocAutoLearn = window.UoocAutoLearn || { apiUrl: 'https://www.qs5.org/tools/szu_tools/index.php' }; // 获取课程列表 UoocAutoLearn.getCatalogList = function () { $.ajax({ type: "GET", url: '/home/learn/getCatalogList', data: { cid: this.cid }, success: function (response) { UoocAutoLearn.loopCatalog(response.data); } }); }; // 遍历课程 UoocAutoLearn.loopCatalog = function (data) { var isFinished = true; for (let index = 0; index < data.length; index++) { const item = data[index]; if (item.finished == 0) { isFinished = false; if (typeof item.children != 'undefined') { UoocAutoLearn.loopCatalog(item.children); } else { // 播放这个课程 console.log('新的课程', item.number, item.name); UoocAutoLearn.catalog_id = item.id; UoocAutoLearn.chapter_id = item.pid; UoocAutoLearn.video_pos = 0; // 开始下一课程 UoocAutoLearn.getUnitLearn(); } break; } } if (isFinished) { console.log('恭喜,本课已全看完。'); } }; // 获取课程进度 UoocAutoLearn.getCourseLearn = function () { $.ajax({ type: "GET", url: '/home/learn/getCourseLearn', data: { cid: this.cid }, success: function (response) { if (response.code != 1) { console.log('Error', response); return; } UoocAutoLearn.chapter_id = response.data.chapter_id; UoocAutoLearn.section_id = response.data.section_id; UoocAutoLearn.resource_id = response.data.resource_id; UoocAutoLearn.catalog_id = response.data.catalog_id; UoocAutoLearn.subsection_id = response.data.subsection_id; UoocAutoLearn.parent_name = response.data.parent_name; // 如果没有看过 if (UoocAutoLearn.chapter_id <= 0) { UoocAutoLearn.getCatalogList(); return; } console.log( '课程信息', UoocAutoLearn.parent_name, '章节', UoocAutoLearn.chapter_id, '部分', UoocAutoLearn.section_id, '资源', UoocAutoLearn.resource_id ); // 获取课程观看时间 UoocAutoLearn.getUnitLearn(); } }); }; // 获取当前课程观看时间 UoocAutoLearn.getUnitLearn = function () { $.ajax({ type: "GET", url: '/home/learn/getUnitLearn', data: { cid: this.cid, chapter_id: this.chapter_id, section_id: this.section_id, catalog_id: this.catalog_id }, success: function (response) { // 遍历每一个视频 var isFinished = true; for (let index = 0; index < response.data.length; index++) { const item = response.data[index]; if (item.finished == 0) { UoocAutoLearn.video_pos = parseFloat(item.video_pos); UoocAutoLearn.videoSource = item.video_play_list[0].source; UoocAutoLearn.title = item.title; UoocAutoLearn.resource_id = item.id; isFinished = false; console.log('当前任务', UoocAutoLearn.parent_name, UoocAutoLearn.title); // 获取视频时长 UoocAutoLearn.getVideoLength(); break; } } // 如果都看完了 if (isFinished) { // 获取下一节课 UoocAutoLearn.getCatalogList(); } } }); }; // 获取视频长度 UoocAutoLearn.getVideoLength = function () { // var video = document.createElement('video'); // 加载完成后调用 // video.onloadeddata = function () { UoocAutoLearn.video_length = 0; // console.log('总时长', UoocAutoLearn.video_length, '秒, 已看至', UoocAutoLearn.video_pos, '秒'); // 开始刷新时间 UoocAutoLearn.markVideoLearn(); // }; // video.src = UoocAutoLearn.videoSource; return; }; // 刷新时间 UoocAutoLearn.markVideoLearn = function () { this.video_pos = this.video_pos + 10; if (this.video_pos > this.video_length && this.video_length > 0) this.video_pos = this.video_length; $.ajax({ type: "POST", url: '/home/learn/markVideoLearn', data: { chapter_id: this.chapter_id, cid: this.cid, // hidemsg_: true, network: 3, resource_id: this.resource_id, section_id: this.section_id, source: 1, subsection_id: this.subsection_id, video_length: this.video_length == 0 ? 100 : this.video_length, video_pos: this.video_pos }, success: function (response) { console.log('已看至', UoocAutoLearn.video_pos, '秒, 总', UoocAutoLearn.video_length == 0 ? '未知' : UoocAutoLearn.video_length, '秒'); if (response.data.finished == 1 || (UoocAutoLearn.video_length > 0 && UoocAutoLearn.video_pos >= UoocAutoLearn.video_length)) { console.log('本课已经结束'); // 获取下一节课 UoocAutoLearn.getCatalogList(); return; } setTimeout(() => { UoocAutoLearn.markVideoLearn(); }, 10 * 1000); } }); }; // 获取课程列表 UoocAutoLearn.homeworkList = function () { console.log('homeworkList'); $.ajax({ type: "GET", url: '/home/task/homeworkList', data: { cid: this.cid, page: 1, pagesize: 20 }, success: function (response) { for (let index = 0; index < response.data.data.length; index++) { const element = response.data.data[index]; // 判断是否批改 if (element.status_code == "20") { // 提交答案到服务器 UoocAutoLearn.examView(UoocAutoLearn.cid, element.id) } } } }); } // 获取作业答案并提交 UoocAutoLearn.examView = function (cid, tid) { console.log('examView', cid, tid); $.ajax({ type: "GET", url: '/exam/view', data: { cid: cid, tid: tid }, success: function (response) { // 判断是否提交试卷 if (response.code == 1) { // 提交试卷到服务器 UoocAutoLearn.sendExam2Server(cid, tid, response.data); } } }); } // 提交试卷到服务器 UoocAutoLearn.sendExam2Server = function (cid, tid, data) { console.log('sendExam2Server', cid, tid); $.ajax({ type: "POST", url: UoocAutoLearn.apiUrl, data: { cmd: 'save_exam_answer', cid: cid, tid: tid, data: JSON.stringify(data) }, success: function (response) { console.log('sendExam2Server', cid, tid, response); } }); } // 从服务器获取答案 UoocAutoLearn.getExamAnswer = function () { console.log('getExamAnswer', this.tid); $.ajax({ type: "GET", url: UoocAutoLearn.apiUrl, dataType: "JSONP", data: { cmd: 'get_exam_answer', tid: this.tid }, success: function (response) { console.log(response); if (response.code == 1) { window._response = response; UoocAutoLearn.answerData = response.data; UoocAutoLearn.loopSetAnchor(); } } }); } // 依次遍历题目修改答案 UoocAutoLearn.loopSetAnchor = function () { console.log("loopSetAnchor"); for (let i = 0; i < UoocAutoLearn.answerData.length; i++) { const item = UoocAutoLearn.answerData[i]; // 获取题目对象 var anchor = $('#anchor' + item.id).parent('.queContainer'); window._item = item; window._anchor = anchor; // 获取题目内容 var anchor_ti = anchor.find('.ti-q-c').text(), answer_ti = $("<div />").html(item.question).text(); // 题目相同再遍历答案 if (anchor_ti == answer_ti) { // 设置题目绿色背景 // anchor.find('.ti-q-c').css({ backgroundColor: '#99FF99' }); // 获取答案 var ti_alist = anchor.find('.ti-alist label'); for (let k = 0; k < ti_alist.length; k++) { const a_item = ti_alist[k]; // 获取作业答案并提交 var ti_k = $(a_item).find('input').val(), ti_v = $(a_item).find('.ti-a-c').text(), an_v = $('<div />').html(item.options[ti_k]).text(); // 对比答案是否一致 一致则勾选 if (ti_v == an_v) { // 设置题目绿色 // $(a_item).find('.ti-a-c').css({ backgroundColor: '#99FF99' }) // 题目是否是正确答案 if (item.answer.indexOf(ti_k) >= 0) { $(a_item).find('input').click(); } } else { // 答案不一致 标红 $(a_item).find('.ti-a-c').css({ backgroundColor: 'burlywood' }); // 显示数据库原题 $(a_item).find('.ti-a-c').append(an_v); } } } // 题目不一致 设置红色 else { // var ti_a_list = $('<ul>'); // for (let i = 0; i < item.answer.length; i++) { // const element = item.answer[i]; // ti_a_list.before('<li>' + + '</li>') // } // var ti_q = $('<div>').text("记录题目: ").css({ backgroundColor: 'burlywood' }), // ti_a = $('<span>') // ti_q.append("记录正确答案: AA"); // anchor.find('.ti-q-c').append(ti_q); anchor.find('.ti-q-c').css({ backgroundColor: 'burlywood' }); } } } // 尝试修改页面题目 UoocAutoLearn.setExamAnswer = function () { this.tid = location.pathname.match(/^\/exam\/([0-9]+)/)[1]; console.log('setExamAnswer', this.tid); // 向服务器查询是否有答案 UoocAutoLearn.getExamAnswer(); } // 遍历添加按钮 UoocAutoLearn.homeAddBtn = function () { console.log("homeAddBtn"); $('.course-item .course-right-bottom-btn').not('.uooc-auto-learn-btn').each(function (key, item) { // 设置未修改过的 if (typeof item.dataset.btnAdd == "undefined") { // 获取标记 var cid = item.pathname.split('/').pop(), btnHtml = '<a class="course-right-bottom-btn uooc-auto-learn-btn" style="font-size: 12px; width: 58px; margin-left: 4px;" data-cid="' + cid + '">在线挂机</a>'; if (cid != '%7B%7Bitem.id%7D%7D') { // 设置为已修改 item.dataset.btnAdd = 'isAdd'; // 修改样式 item.style.fontSize = '12px'; item.style.width = '58px'; // 追加元素 $(item).before(btnHtml); } } }); }; // 添加百度搜索按钮 UoocAutoLearn.examAddBaidu = function () { // 修改页面样式 $('body>div.uwidth').css({ marginLeft: '0px' }); $('.ti-q-c').before('<a href="javascript:;" class="question-item" data-type="baidu">百度搜索</a> | <a href="javascript:;" class="question-item" data-type="qs5">搜索题库</a>'); $('.question-item').click(function (e) { let query = $(this).nextAll('.ti-q-c').text(), url = 'https://www1.baidu.com/s?uooc=1&wd=' + query; switch (this.dataset.type) { case "baidu": url = 'https://www1.baidu.com/s?uooc=1&wd=' + query; break; case "qs5": url = 'https://www.qs5.org/tools/szu_tools/search.html#' + query; break; default: url = 'https://www1.baidu.com/s?uooc=1&wd=' + query; break; } layer.open({ type: 2, title: false, shadeClose: true, // 遮罩关闭 shade: 0.5, // 遮罩透明度 closeBtn: 0, //不显示关闭按钮 offset: 'r', // 弹出层位置 area: ['730px', '100%'], // 大小 anim: 3, // 动画 向左滑动 content: url }); }); }; // 作业列表页面 尝试获取已经做过的题目然后提交 UoocAutoLearn.examHomeWork = function () { // 获取 cid this.cid = location.pathname.match(/^\/home\/course\/([0-9]+)/)[1]; console.log('examHomeWork', this.cid); // 尝试获取答案并提交到服务器 UoocAutoLearn.homeworkList(); } // 区分页面地址进行修改 只对刷新有效 UoocAutoLearn.changePage = function () { console.log('changePage'); // /home/course/1083723112#/homework 作业列表页面 location.hash == "#/homework" && if (/^\/home\/course\/[0-9]+/.test(location.pathname)) { console.log('home/course'); UoocAutoLearn.examHomeWork(); return; } // /exam/955957832 做题页面 else if (/^\/exam\/[0-9]+/.test(location.pathname)) { console.log("exam"); // 判断题目是否出来 if ($('.ti-q-c').length > 0) { UoocAutoLearn.setExamAnswer(); // 添加搜索按钮 UoocAutoLearn.examAddBaidu(); return; } } // 已选课程列表 else if (/^\/home/.test(location.pathname)) { // 尝试添加按钮 UoocAutoLearn.homeAddBtn(); // 死循环每隔500检测一次按钮 UoocAutoLearn.addBtnIntervalId = setInterval(() => { UoocAutoLearn.homeAddBtn(); }, 500); return; } // 百度搜索页面 接管链接 else if (/^\/s/.test(location.pathname) && /^\?uooc=1&/.test(location.search) && /^https?:\/\/.*?\.uooconline\.com\/exam\//.test(document.referrer)) { console.log('载入百度'); UoocAutoLearn.baiduLink(); return; } // 到这里就默认定时器处理 setTimeout(() => { UoocAutoLearn.changePage(); }, 500); }; // 百度搜索页面修改 UoocAutoLearn.baiduLink = function () { $('#content_left .result h3.t a').click(function (e) { window.parent.postMessage(this.href, document.referrer); return false; }); }; // 事件回调 页面消息 UoocAutoLearn.eventMessage = function (e) { // 页面宽度 var w = document.body.clientWidth - 550; layer.open({ type: 2, title: false, shadeClose: true, // 遮罩关闭 shade: 0.5, // 遮罩透明度 closeBtn: 0, //不显示关闭按钮 offset: 'r', // 弹出层位置 area: [w + 'px', '100%'], // 大小 anim: 3, // 动画 向左滑动 content: e.data }); } // 页面加载完成执行绑定 $(function () { // 绑定按钮事件 $(document).on('click', '.uooc-auto-learn-btn', function () { UoocAutoLearn.cid = this.dataset.cid; console.log('开始任务', UoocAutoLearn.cid); // 结束定时添加按钮的定时器 clearInterval(UoocAutoLearn.addBtnIntervalId); // 获取课程进度 UoocAutoLearn.getCourseLearn(); }); // 监听消息回调 暂时不再需要 window.addEventListener('message', UoocAutoLearn.eventMessage, false); }); // 注册(不可用)到全局 window.UoocAutoLearn = UoocAutoLearn; // 修改页面 UoocAutoLearn.changePage(); })(window, window.jQuery);
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址