请选择 进入手机版 | 继续访问电脑版

应渣男舍友要求更新《超星尔雅助手》1.2.1版本!

fpschen 发表于 2018-10-25 22:52:07 | 显示全部楼层 [复制链接]
23 2766

新增切换画质的功能!

准备四级,暂时不想搞JS了!

唉!

上代码

  1. // ==UserScript==
  2. // @icon            https://ss0.baidu.com/73t1bjeh1BF3odCf/it/u=3507160010,2121752339&fm=77&s=1947387E66836BF52423D3FB0300A01E
  3. // @name                        超星尔雅助手
  4. // @namespace       http://tampermonkey.net/
  5. // @author                        fpschen
  6. // @description                自动答题,课程自动切换,后台静音播放(默认静音),播放线路自动切换,勇士特权:5秒内一节课
  7. // @version                        1.2.1
  8. // @match                        *://*.chaoxing.com/mycourse/*
  9. // @requier         https://mooc1-1.chaoxing.com/js/build/jquery.js
  10. // @supportURL      https://greasyfork.org/zh-CN/scripts/372319/feedback
  11. // @grant           GM_xmlhttpRequest
  12. // @grant                GM_download
  13. // @connect         poxiaobbs.com
  14. // ==/UserScript==


  15. var config = {
  16.         muted : true,                                //静音播放
  17.         time : 1000,                                //延时设置(单位毫秒),当网速慢时增大此值,不建议减小该值
  18.         Playline : false,                        //自动切换线路,默认关闭
  19.         change_quality : false,                //切换为极速画质,默认关闭
  20.         auto_answer : false,                //自动答题,默认关闭
  21.         auto_change : false,                //自动跳课,默认关闭
  22.         random : false,                                //随机答题,默认关闭
  23.     five_second : false,        //5秒内一节课,默认关闭
  24.         alarm : true,                                //5秒模式警告,仅当开启5秒模式有效
  25.        
  26.         //以下代码禁止改动
  27.         isStart : false,                        //点击标记
  28.         isChanged : false,                        //切换标记
  29.     changing : false,           //切换标记
  30.         cycle : null,                                //循环标记
  31.         No : 0,                                                //题号
  32.         complete : false,                        //答题标记
  33.         temp : null                                        //分配标记
  34. },
  35. player, Fls = /×/, cannel = /本校/, quality = /极速/;

  36. $(document).ready(function(){
  37.     if(new RegExp("study").test(location.href)) add_style();
  38. });

  39. function check_player()
  40. {
  41.         if(typeof(player) === 'undefined')
  42.     {
  43.         player = $("iframe").contents().find("iframe").contents().find('video#video_html5_api')[0];
  44.         setTimeout(check_player, config.time*0.5);
  45.     }
  46.     else
  47.     {
  48.         blr = $("iframe").contents().find("iframe").contents().find("div.vjs-poster")[0];
  49.         blr.addEventListener("blur", function(){player.play();});
  50.                 config.isStart = true;
  51.         setTimeout(start, config.time*2.0);
  52.     }
  53. }

  54. function start()
  55. {
  56.         if(typeof(player) === 'undefined') check_player();
  57.     else
  58.     {
  59.         if(player.paused && !config.changing)
  60.                 {
  61.                         player.play();
  62.                         if(config.Playline)
  63.                                 setTimeout(change_cannel, config.time*0.8);
  64.                         if(config.change_quality)
  65.                                 setTimeout(change_quality, config.time*0.8);
  66.                 }
  67.         if(config.muted && !player.muted){player.muted = true;}
  68.         if((player.duration - player.currentTime) <= 2)
  69.         {
  70.                         config.isChanged = false;
  71.             clearTimeout(config.cycle);
  72.                         if(config.temp == null)
  73.                         {
  74.                                 if(config.auto_answer)
  75.                 {
  76.                                         config.temp = setTimeout(change_to_answer, config.time*1.5);
  77.                 }
  78.                                 else if(config.auto_change)
  79.                 {
  80.                     config.changing = true;
  81.                     clearTimeout(config.cycle);
  82.                                         setTimeout(change_course, config.time*1.5);
  83.                 }
  84.             }
  85.         }
  86.         if(config.five_second)
  87.         {
  88.             let time = player.currentTime + player.duration/10;
  89.             if(time < (player.duration - 3))
  90.                 player.currentTime = time;
  91.             else {player.currentTime = player.duration - 1.02;}
  92.         }
  93.         config.cycle = setTimeout(start, 600);
  94.     }
  95. }

  96. function stop()
  97. {
  98.         clearTimeout(config.cycle);
  99.         config.temp = null;
  100.         config.No = 0;
  101.         config.complete = false;
  102.         config.isChanged = false;
  103. }

  104. function btn_start()
  105. {
  106.         if(!config.isStart)
  107.                 setTimeout(check_player, config.time*1.0);
  108. }

  109. function change_cannel()
  110. {
  111.         let playline = $("iframe").contents().find("iframe")
  112.                                 .contents().find("li.vjs-menu-item.vjs-selected");
  113.         let num = playline.length;
  114.         for(let i = 0; i < num; i++)
  115.         {
  116.                 if(cannel.test(playline[i].innerText))
  117.                 {
  118.                         playline[i].nextElementSibling.click();
  119.                         Pause(config.time*0.6);
  120.                         break;
  121.                 }
  122.         }
  123. }

  124. function change_quality()
  125. {
  126.         let tmp = false;
  127.         let selected = $("iframe").contents().find("iframe")
  128.                                 .contents().find("li.vjs-menu-item.vjs-selected");
  129.         let num = selected.length;
  130.         for(let i = 0; i < num; i++)
  131.         {
  132.                 if(quality.test(selected[i].innerText))
  133.                 {
  134.                         tmp = true;
  135.                         break;
  136.                 }
  137.         }
  138.         if(!tmp)
  139.         {
  140.                 selected = $("iframe").contents().find("iframe")
  141.                                 .contents().find("li.vjs-menu-item");
  142.                 num = selected.length;
  143.                 for(let i = 0; i < num; i++)
  144.                 {
  145.                         if(quality.test(selected[i].innerText))
  146.                         {
  147.                                 selected[i].click();
  148.                                 Pause(config.time*0.8);
  149.                                 break;
  150.                         }
  151.                 }
  152.         }
  153. }

  154. function add_style()
  155. {
  156.     let div_block, stop_btn, start_btn, ext, ext_ckb,
  157.                 tbl1, tbl2, check_box1, check_box2, change_playline, check_box3;
  158.     start_btn = document.createElement("button");
  159.         check_box1 = document.createElement("input");
  160.         check_box2 = document.createElement("input");
  161.     stop_btn = document.createElement("button");
  162.     div_block = document.createElement("div");
  163.         tbl1 = document.createElement("span");
  164.         tbl2 = document.createElement("span");
  165.         ext = document.createElement("span");
  166.         ext_ckb = document.createElement("input");
  167.         change_playline = document.createElement("span");
  168.         check_box3 = document.createElement("input");
  169.     div_block.setAttribute("style", "position:fixed;left:10%;top:10%");
  170.     div_block.setAttribute("class", "div_block");
  171.         check_box1.setAttribute("type", "checkbox");
  172.         check_box1.setAttribute("id", "ckb1");
  173.         check_box2.setAttribute("type", "checkbox");
  174.         check_box2.setAttribute("id", "ckb2");
  175.         check_box3.setAttribute("type", "checkbox");
  176.         check_box3.setAttribute("id", "ckb3");
  177.         ext_ckb.setAttribute("type", "checkbox");
  178.         ext_ckb.setAttribute("id", "ext_ckb");
  179.         change_playline.innerHTML = "切换线路";
  180.         tbl1.innerHTML = "开启自动跳课";
  181.         tbl2.innerHTML = "开启自动答题";
  182.     start_btn.innerHTML = "开始";
  183.     stop_btn.innerHTML = "暂停";
  184.         ext.innerHTML = "切换极速画质";
  185.         tbl1.addEventListener('click', function(){ config.auto_change = check_box1.checked;});
  186.         tbl2.addEventListener('click', function(){ config.auto_answer = check_box2.checked;});
  187.     change_playline.addEventListener('click', function(){
  188.                         config.Playline = check_box3.checked;});
  189.         ext.addEventListener("click", function(){ config.change_quality = ext_ckb.checked;});
  190.         start_btn.addEventListener('click', btn_start);
  191.     stop_btn.addEventListener('click', stop);
  192.         tbl1.appendChild(check_box1);
  193.         tbl2.appendChild(check_box2);
  194.         ext.appendChild(ext_ckb);
  195.         change_playline.appendChild(check_box3);
  196.     div_block.appendChild(start_btn);
  197.     div_block.appendChild(stop_btn);
  198.         div_block.appendChild(tbl2);
  199.         div_block.appendChild(tbl1);
  200.         div_block.appendChild(change_playline);
  201.         div_block.appendChild(ext);
  202.     $("body")[0].appendChild(div_block);
  203.         if(config.five_second && config.alarm)
  204.                 alarm();
  205. }

  206. function alarm()
  207. {
  208.         let div, p, recycle;
  209.     recycle = function(){ $("#alarm")[0].style.display = "";};
  210.         div = document.createElement("div");
  211.         p = document.createElement("p");
  212.         p.innerHTML = "男人没一个好东西!";
  213.     div.setAttribute("id", "alarm");
  214.         div.setAttribute("style", "position:fixed;top:0%;left:25%;opacity:0.55");
  215.         p.setAttribute("style", "font-size:600%;color:green;opacity:0.55;");
  216.     div.addEventListener("click", function(){
  217.         div.style.display = "none";
  218.         setTimeout(recycle, 2000);
  219.     });
  220.         div.appendChild(p);
  221.         $("#mainid")[0].after(div);
  222. }

  223. function change_course()
  224. {
  225.         if(!config.isChanged)
  226.         {
  227.         let tmp;
  228.         try
  229.         {
  230.                    tmp = $("h4.currents")[0].parentElement.parentElement.nextElementSibling.children[0];
  231.         }
  232.         catch(err){tmp = $("h4.currents")[0].parentElement.parentElement.parentElement.nextElementSibling.children[0];}
  233.         if(tmp.hasAttribute('href'))
  234.        {
  235.            if(tmp.href != "javascript:void")
  236.            {
  237.                tmp.children[0].click();
  238.                config.isChanged = true;
  239.                        setTimeout(change_page, config.time*1.5);
  240.            }
  241.         }
  242.         else
  243.         {
  244.             tmp = tmp.parentElement.children[1].children[0];
  245.             if(tmp.href != "javascript:void")
  246.             {
  247.                 tmp.children[0].click();
  248.                 config.isChanged = true;
  249.                         setTimeout(change_page, config.time*1.5);
  250.             }
  251.         }
  252.         }
  253. }

  254. function change_page()
  255. {
  256.         try
  257.         {
  258.         let blk = document.getElementById("dct1");
  259.                 if(blk.title == "视频")
  260.         {
  261.                         blk.click();
  262.             config.changing = false;
  263.             player = undefined;
  264.             setTimeout(check_player, config.time*1.5);
  265.         }
  266.                 else
  267.                 {
  268.                         document.getElementById("dct2").click();
  269.             config.changing = false;
  270.             player = undefined;
  271.             setTimeout(check_player, config.time*1.5);
  272.                 }
  273.         }
  274.         catch(err){console.warn(err.message);}
  275. }

  276. function change_to_answer()
  277. {
  278.         try
  279.         {
  280.         let blk = document.getElementById("dct2");
  281.                 if(blk.title == "章节测验")
  282.         {
  283.                         blk.click();
  284.             config.changing = false;
  285.             player = undefined;
  286.             setTimeout(distribute, config.time*3.5);
  287.         }
  288.                 else
  289.                 {
  290.                         document.getElementById("dct3").click();
  291.             config.changing = false;
  292.             player = undefined;
  293.             setTimeout(distribute, config.time*3.5);
  294.                 }
  295.         }
  296.         catch(err){console.warn(err.message);}
  297. }

  298. function completed()
  299. {
  300.         if(!config.complete)
  301.                 setTimeout(completed, config.time*0.6);
  302.         else
  303.         {
  304.                 config.complete = false;
  305.         config.No += 1;
  306.                 setTimeout(distribute, config.time*1.0);
  307.         }
  308. }

  309. function distribute()
  310. {
  311.         let TiMu, len, q;
  312.         TiMu = $("iframe").contents().find("iframe").contents().find("iframe").contents().find("div.TiMu");
  313.         len = TiMu.length;
  314.         if(config.No < (len-1))
  315.         {
  316.                 q = TiMu[config.No].children[0].getElementsByTagName('div')[0].innerText
  317.                         || TiMu[config.No].children[0].getElementsByTagName("p");
  318.                 q = q.substr(5).trim();
  319.                 if(q.length > 15)
  320.                         q = q.substr(q.length/2 - 5, q.length/2 + 4);
  321.                 else
  322.                         q = q.substr(0, q.length-3);
  323.                 get_answer(TiMu[config.No], q.trim());
  324.         }
  325.         else
  326.         {
  327.                 q = TiMu[len-1].children[0].children[1].innerText
  328.                         || TiMu[len-1].children[0].getElementsByTagName("p");
  329.                 q = q.substr(5).trim();
  330.                 if(q.length > 15)
  331.                         q = q.substr(q.length/2 - 4, q.length/2 + 4);
  332.                 else
  333.                         q = q.substr(0, q.length-3);
  334.                 get_answer(TiMu[len-1], q.trim(), true);
  335.         }
  336. }

  337. function get_answer(context, q, lable=false)
  338. {
  339.         GM_xmlhttpRequest({
  340.         method : "GET",
  341.         url : "https://cx.poxiaobbs.com/api.php?word=" + q,
  342.         onload : function(res){
  343.             if(res.status === 200)
  344.             {
  345.                                 answer(context, JSON.parse(res.responseText)['ans'], lable);
  346.                         }
  347.                         else
  348.                                 answer(context, {'ans':null, length:0}, lable);
  349.         }
  350.         });
  351. }

  352. function answer(context, ans, lable=false)
  353. {
  354.         let choices, choice, tmp;
  355.         choices = context.children[1].getElementsByTagName("li");
  356.         if(ans.length > 0)
  357.         {
  358.                 if(choices.length != 2)
  359.                 {
  360.                         for(let i = 0; i < choices.length; i++)
  361.                         {
  362.                                 choice = choices[i].getElementsByTagName("a")[0];
  363.                                 tmp = new RegExp(choice.innerText.trim());
  364.                                 if(tmp.test(ans['ans']))
  365.                                 {
  366.                                         choice.click();
  367.                                         Pause(config.time*0.6);
  368.                                 }
  369.                         }
  370.                 }
  371.                 else
  372.                 {
  373.                         let t_f;
  374.                         t_f = Fls.test(ans['ans']);
  375.                         choices[(1 - !t_f)].getElementsByTagName("b")[0].click();
  376.                 }
  377.                 config.complete = true;
  378.                 if(!lable)
  379.                         setTimeout(completed, config.time*0.6);
  380.                 else
  381.                         setTimeout(post_answer, config.time*5.0);
  382.         }
  383.         //随缘答题
  384.         else if(config.random)
  385.         {
  386.                 if(choices.length > 2)
  387.                         choices[Math.floor(Math.random()*(choices.length-0.1))]
  388.                                 .getElementsByTagName("a")[0].click();
  389.                 else
  390.                         choices[Math.floor(Math.random() + 0.5)]
  391.                                 .getElementsByTagName("b")[0].click();
  392.                 config.complete = true;
  393.                 if(!lable)
  394.                         setTimeout(completed, config.time*0.6);
  395.                 else
  396.                         setTimeout(post_answer, config.time*5.0);
  397.         }
  398.         else
  399.         {alert("答题了!"); stop(); return;}
  400. }

  401. function post_answer()
  402. {
  403.         config.No = 0;
  404.         let sub = $("iframe").contents().find("iframe").contents().find("iframe").contents()
  405.                 .find("div#ZyBottom")[0].getElementsByClassName("ZY_sub clearfix")[0];
  406.         sub.getElementsByTagName("a")[1].click();
  407.         setTimeout(confirm_sub, config.time*0.6);
  408. }

  409. function confirm_sub()
  410. {
  411.         if(config.auto_answer)
  412.         {
  413.                 try
  414.                 {
  415.                         $("iframe").contents().find("iframe").contents().find("iframe").contents()
  416.                                 .find("div.con03")[0].getElementsByTagName("a")[0].click();
  417.                         config.temp = null;
  418.                         setTimeout(change_course, config.time*10.0);
  419.                 }
  420.                 catch(err)
  421.                 {
  422.                         console.warn(err);
  423.                         setTimeout(change_course, config.time*10.0);
  424.                 }
  425.         }
  426. }

  427. function Pause(mills)
  428. {
  429.     let start, end;
  430.     start = new Date();
  431.     start = start.valueOf();
  432.     while(true)
  433.     {
  434.         end = new Date();
  435.         if((end.valueOf() - start) > mills)
  436.         {console.log("end"); break;}
  437.     }
  438. }
复制代码
最后,我想说。。。

男人没一个好东西,都是骗子!




温馨提示:点击页面任意处的广告支持我们哦,每天可点一次!
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
发表于 2018-9-29 20:12:03 | 显示全部楼层
若对控件的横向放置改为纵向,可将代码的173~177行的span字段改为table!
或者将代码中所有的span改为table即可!
破晓论坛-poxiaobbs.com 这一次,更胜以往!
发表于 2018-9-29 20:46:15 | 显示全部楼层
为什么开启没效果呢

点评

https://greasyfork.org/zh-CN/scripts/372319 请问什么没有效果呢?  详情 回复 发表于 2018-9-29 08:49 PM
破晓论坛-poxiaobbs.com 这一次,更胜以往!
发表于 2018-9-29 20:49:29 | 显示全部楼层
chenxin0613 发表于 2018-9-29 08:46 PM
为什么开启没效果呢

https://greasyfork.org/zh-CN/scripts/372319
请问什么没有效果呢?
破晓论坛-poxiaobbs.com 这一次,更胜以往!
发表于 2018-9-30 21:25:42 | 显示全部楼层
看成 渣男友
感谢支持破晓论坛哦
发表于 2018-9-30 21:26:44 | 显示全部楼层
破晓论坛-poxiaobbs.com 这一次,更胜以往!
发表于 2018-10-11 09:47:30 ——来自破晓论坛手机网页版 | 显示全部楼层
有没有意向新增答案采集。因为题库答案还是不足。另外填空等不能回答。

点评

超星的题库可以收集,下载自动收集题目的脚本地址http://47.106.96.122/cx/collect.js.tar.gz 解压后复制粘贴到油猴即可 收集题目尽量收集所有答完题的课程 后续我会开放搜索页面  详情 回复 发表于 2018-10-25 08:41 PM
填空题我没遇到过,所以无法自动答填空题  详情 回复 发表于 2018-10-20 12:15 PM
破晓论坛-poxiaobbs.com 这一次,更胜以往!
发表于 2018-10-15 19:42:17 | 显示全部楼层
谢过楼主了 祝楼主四级600高分过
破晓论坛-poxiaobbs.com 这一次,更胜以往!
发表于 2018-10-16 19:21:54 | 显示全部楼层
楼主!!!用这个会不会导致不良记录啊 我现在看了一多半但是视频分满分四十只有十分 慌了!

点评

这个分数是视频占15%,章节测验占15%,考试占50%,访问占10%,阅读占10% 分数占比基本是这样 至于会不会出现不良记录,这个我就不知道了!反正我现在是没有!  详情 回复 发表于 2018-10-17 04:18 PM
破晓论坛-poxiaobbs.com 这一次,更胜以往!
发表于 2018-10-17 16:18:50 | 显示全部楼层
苏打糖 发表于 2018-10-16 07:21 PM
楼主!!!用这个会不会导致不良记录啊 我现在看了一多半但是视频分满分四十只有十分 慌了!

这个分数是视频占15%,章节测验占15%,考试占50%,访问占10%,阅读占10%
分数占比基本是这样
至于会不会出现不良记录,这个我就不知道了!反正我现在是没有!
破晓论坛-poxiaobbs.com 这一次,更胜以往!
发表于 2018-10-20 12:15:40 | 显示全部楼层
jidaojiuyou 发表于 2018-10-11 09:47 AM
有没有意向新增答案采集。因为题库答案还是不足。另外填空等不能回答。

填空题我没遇到过,所以无法自动答填空题
破晓论坛-poxiaobbs.com 这一次,更胜以往!
发表于 2018-10-25 18:34:05 | 显示全部楼层
你好大佬 题目怎么自动答啊  是不是需要单独的题库文件 我现在就是替换了智慧树里的js文件 还有改了里面其他文件的一些关键字   自动播放是实现了  就是不答题- -望解答

点评

这是超星尔雅的,不支持智慧树 如果想要刷智慧树的你可以去greasyfork那里搜索超星尔雅,然后下载最多人用的那个即可  详情 回复 发表于 2018-10-25 06:58 PM
破晓论坛-poxiaobbs.com 这一次,更胜以往!
发表于 2018-10-25 18:58:18 | 显示全部楼层
林方狗 发表于 2018-10-25 06:34 PM
你好大佬 题目怎么自动答啊  是不是需要单独的题库文件 我现在就是替换了智慧树里的js文件 还有改了里面其 ...

这是超星尔雅的,不支持智慧树
如果想要刷智慧树的你可以去greasyfork那里搜索超星尔雅,然后下载最多人用的那个即可

点评

用的就是超星哦 就是之前用过智慧树的然后套用进去的  详情 回复 发表于 2018-10-25 10:52 PM
破晓论坛-poxiaobbs.com 这一次,更胜以往!
发表于 2018-10-25 20:41:33 | 显示全部楼层
jidaojiuyou 发表于 2018-10-11 09:47 AM
有没有意向新增答案采集。因为题库答案还是不足。另外填空等不能回答。

超星的题库可以收集,下载自动收集题目的脚本地址http://47.106.96.122/cx/collect.js.tar.gz
解压后复制粘贴到油猴即可
收集题目尽量收集所有答完题的课程
后续我会开放搜索页面

点评

大概知道咋用了= =原来要用Tampermonkey 配合着用呀 我之前都是用的扩展插件 还有就是章节测试怎么自动答题呀 谢谢大佬  详情 回复 发表于 2018-10-25 11:07 PM
破晓论坛-poxiaobbs.com 这一次,更胜以往!
发表于 2018-10-25 22:52:07 | 显示全部楼层
fpschen 发表于 2018-10-25 06:58 PM
这是超星尔雅的,不支持智慧树
如果想要刷智慧树的你可以去greasyfork那里搜索超星尔雅,然后下载最多人 ...

用的就是超星哦   就是之前用过智慧树的然后套用进去的
破晓论坛-poxiaobbs.com 这一次,更胜以往!
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入我们,

发现科技可以让生活更美好...

立即注册

如果您已拥有本站账户,则可

为您推荐

返回顶部

在线咨询| 手机版|小黑屋| 破晓论坛 ( 陇ICP备16000681号-1 )

Templated By 破晓论坛   2016-2018

Powered by Discuz! X3.4

© 2001-2018 Comsenz Inc.

返回顶部 返回列表