本着开源分享的精神,我把代码发到了b站上和博客上。
这个解决问题的想法并非我原创,网上有好多教程,比我早。而且这个一开始也是跟我自己的思路有点出入的。只能算是我对其的一个扩展。供大家学习使用。
腾讯课堂
腾讯课堂实现自动化
打开chrome
浏览器(其他的也可以,chrome最好啦)。
打开开发者工具
,直接将代码复制到console
栏,按enter
键即可。如果还不会用,就点击上面的那个链接。
注意
- 后台运行。有的小伙伴不太会用,解释一下。代码复制到console栏之后,自己就可以做别的事去了,哪怕你把浏览器最小化都行。只要不关闭页面,代码就会一直运行。
- 怎么知道有没有签到成功?签到的话,会在console栏里面输出“xxx时间完成签到”、“xxx时间完成确定”字样。输出信息,那就是在你这里已经签上了,老师那边如果没数据,就是老师的事,要不就是网络的事。我前几天碰到过,三次签到都没记录,我跟老师说我全签了,然后他重新下载记录,就有了。下课之后可以看console。如果太多信息,覆盖了结果,可以参照我下图的设置。用完了再还原Default就行
1 开启自动任务
自动送花
开启一个3秒
送花的定时器:
1 2 3 4
| let flower=setInterval(function (){ document.getElementsByClassName("toolbar-icon")[2].click(); console.log("送花"); },3000);
|
自动签到
开启一个每隔10秒
检测一次是否有签到按钮的定时器,有的话就点击:
1 2 3 4 5 6 7 8
| let btns; let attend=setInterval(function (){ btns=document.getElementsByClassName("s-btn s-btn--primary s-btn--m"); if(btns.length>0){ console.log(new Date().toLocaleTimeString()+"--完成-->"+btns[0].innerText); btns[0].click(); } },10000);
|
自动签到升级版
如果不是刚需的话,这个版本,我不推荐用的。里面有很多bug。只是实现功能的话,很简单,代码也不多,但是如果要把代码完善起来,就要很多代码了,目前我还没那么多时间整这个。所以,将就着用吧,代码的话,还是最初实现的版本,我没深入去优化了。
也是有小伙伴要的功能,仔细一想,好像我也会用到。
环境:
具体安装过程:
- 挂梯子,翻墙(免费的话,推荐蓝灯->下载地址android,windows,mac)
- 打开上面Chrome扩展后面的链接,点击安装
- 安装之后,右上角会出来个猴子的标志,没有的话,点击管理扩展程序,启用即可
- 点击猴子,点击添加新脚本,保存即可
具体的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
(function() { 'use strict'; function autoAttend() { let btns; let attend = setInterval(function() { btns = document.getElementsByClassName("s-btn s-btn--primary s-btn--m"); if (btns.length > 0) { console.log(new Date().toLocaleTimeString() + "--完成-->" + btns[0].innerText); btns[0].click(); } }, 10000); } function showBtn() { let $switch = document.createElement("span"); let $body = document.querySelector(".web"); let show = true; $switch.innerText = "显示/隐藏"; $switch.style = "position:absolute;top:21px;right:520px;color:#AAAAAA;border-radius:10px;cursor:pointer;z-index:3000"; $switch.onclick = function() { if (show) { document.querySelector(".study-body.mr").style = "right:0;z-index:999"; show = false; } else { document.querySelector(".study-body.mr").style = "right:300px;z-index:0"; show = true; } } $body.appendChild($switch); } function clearRefresh() { window.localStorage.removeItem("refresh"); } function autoRefresh() { window.localStorage.setItem("refresh", "no"); let response = prompt("请输入上课时间的前2分钟,并点击确定按钮开始执行自动刷新!", "13:28"); if (response !== null) { let arr = response.trim().split(":"); let date; let timid = setInterval(function() { date = new Date(); if (date.getHours() == parseInt(arr[0]) && date.getMinutes() == parseInt(arr[1])) { window.location.reload(); } }, 1000); } else { clearRefresh(); } } function isRefresh() { let isRefresh = window.localStorage.getItem("refresh") || "yes"; console.log(isRefresh); if (isRefresh == "yes") { autoRefresh(); } else { clearRefresh(); } } isRefresh(); autoAttend(); showBtn(); })();
|
自动刷屏
每隔3秒
发送886
1 2 3 4 5 6
| let say = setInterval(function() { document.getElementsByClassName("ql-editor")[0].firstElementChild.innerText = "886"; }, 3000); let say2 = setInterval(function() { document.getElementsByClassName("text-editor-btn")[0].click(); }, 3000)
|
下课自动发886
设置好下课的时间,比如我的线代下课时间是16:50
,自动发送886
。
这个执行了之后会自动关闭,如果在执行之前想关闭,请跳转到这里关闭下课提示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| let targetHour = "16"; let targetMin = "50"; let date; let inputed = false; let timing = setInterval(function() { date = new Date(); if (date.getHours() == parseInt(targetHour) && date.getMinutes() == parseInt(targetMin)) { if (!inputed) { document.getElementsByClassName("ql-editor")[0].firstElementChild.innerText = "886" inputed = true; } else { document.getElementsByClassName("text-editor-btn")[0].click(); window.clearInterval(timing); console.log("下课咯!"); } } }, 1000);
|
显示/隐藏对话框
有小伙伴要这个功能,然后就加了一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| let $switch = document.createElement("span"); let $body = document.querySelector(".web"); let show = true; $switch.innerText = "显示/隐藏"; $switch.style = "position:absolute;top:21px;right:520px;color:#AAAAAA;border-radius:10px;cursor:pointer;z-index:3000"; $switch.onclick = function() { if (show) { document.querySelector(".study-body.mr").style = "right:0;z-index:999"; show = false; } else { document.querySelector(".study-body.mr").style = "right:300px;z-index:0"; show = true; } } $body.appendChild($switch);
|
效果如图:
2 关闭自动任务
关闭送花
1 2 3 4
| if(flower){ window.clearInterval(flower); console.log("已关闭送花"); }
|
关闭签到
1 2 3 4
| if(attend){ window.clearInterval(attend); console.log("已关闭签到"); }
|
关闭刷屏
1 2 3 4 5
| if(say){ window.clearInterval(say); window.clearInterval(say2); console.log("已关闭刷屏"); }
|
关闭下课提示
1 2 3 4
| if(timing){ window.clearInterval(timing); console.log("提前关闭下课提示"); }
|
3 今天上课的小插曲
一开始刚测试送花的时候,我开的是1秒送一个,估计是太活跃了,直接让马原老师,叫起来提问问题了。
我一脸懵逼啊,还好有大佬江湖救急。
还有一个小插曲,就是马原老师问了一个问题,“越南是什么党派?”。
然后,下面一堆回复共产党。老师说,他直接被腾讯警告了。
哈哈,太难了也!
文库下载
超简单!学生如何免费下载文档,一看就会
刚才在做英语练习题的时候,做完了,想对一下答案,就百度了搜了一下,进去一个文库。
下载文档要12块钱,我就看了一下,上面预览的都是图片,所以就想着,js批量把图片下载下来,然后合成pdf,就正常看了,关键是没花钱啊,要不用浪费多长时间。
具体的使用我放到youtube的文库免费下载小技巧,本来想往b站传的,但是被驳回锁定了。下面放上代码吧。
1 示例淘豆网
淘豆网就是直接把图片放出来了,咱们直接下手就行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| function download(url, fileName) { let xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'blob'; xhr.onload = () => { if (xhr.status === 200) { downloadByA(xhr.response,fileName); } }; xhr.send(); } function downloadByA(data,fileName){ let urlObject = window.URL || window.webkitURL || window; let export_blob=new Blob([data]); let a=document.createElement("a"); a.href=urlObject.createObjectURL(export_blob); a.download=fileName; a.click(); }
document.querySelectorAll(".pageBox img").forEach(function(ele, i) { download(ele.src,i+".jpg"); });
|
然后将下载出的图片合成pdf,就ok了
点击进入淘豆网示例网址
2 示例道客巴巴
道客巴巴就有点小心眼了,他把所有的预览图片,都转成了canvas形式的,那也没事,咱们同样用代码给他转回来。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| function download(url, fileName) { let xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'blob'; xhr.onload = () => { if (xhr.status === 200) { downloadByA(xhr.response,fileName); } }; xhr.send(); } function downloadByA(data,fileName){ let urlObject = window.URL || window.webkitURL || window; let export_blob=new Blob([data]); let a=document.createElement("a"); a.href=urlObject.createObjectURL(export_blob); a.download=fileName; a.click(); }
document.querySelectorAll(".outer_page .inner_page").forEach(function(ele, i) { download(ele.toDataURL("image/jpeg"),i+".jpg"); });
|
点击进入道客巴巴示例网址
3 示例百度文库
百度文库有文字显示的,也有图片显示的,这里主要针对图片显示的,文字的我也看了太麻烦了。
但是在处理图片的过程中也出了问题,涉及到跨域的问题
1 2 3
| document.querySelectorAll(".mod.reader-page.complex.hidden-doc-banner .inner .bd .reader-pic-item").forEach(function(ele, i) { download(ele.style.backgroundImage.match(/[^url("].*[^")]/)[0],i+".jpg"); });
|
点击进入百度文库示例网址,网址放到这里,留着以后有时间再研究。准备上数学课了。
4 关于合成pdf
现在工具很多,有免费在线版,也有免费的客户端,给大家推荐两款吧。
- 免费在线转pdf
- adobe acrobat
我是用的acrobat这个软件,这个比较好用,还可以去水印之类的。在我之前去水印的文章里,有提到过。