Tampermonkey

分类下相关文章

网校自动选课软件

扫描所有课程,记录其所属的网校。前面几节课随机选,快超过学时了,就选几个学时少的课程。 目的是减少每次选课人工计算的时间。 界面上配置的规则有 学员类别 年度 哪个网校 年度主要是2019-2021年三年、 课程有2种情况的人员 一种人员公需课不低于15学时、专业课不低于30学时、在这上面、学时尽量别超的多、因为按学时付费 另一种人员公需课不低于10学时、专业课不低于20学时 添加执行逻辑 点击开始 如果没有选择三项,提示 过滤一轮所有课程,排除不符合条件的。 同时将符合条件的分为两个不同分类, 不同分类下再分为不同学校。 从符合条件的里面,随机抽取,直到满足学分 然后逐一添加课程 完成后 ...

阅读全文...

继续教育网校在线作业自动学习视频并答题, iframe 不触发逻辑问题

在用 tampermonkey 实现一个继续教育网校在线作业自动学习视频并答题的程序,一切都运行正常。 唯一遇到的是在答题时,题目是在一个 iframe 嵌 iframe 里的,此时脚本就没有触发执行。 非常诡异,只有这一个 iframe 没有触发,而其他的均触发了。 搞了近一个小时没有头绪,本以为是 tampermonkey 的限制,后来仔细看浏览器的网络请求,发现原理这个 iframe 做了两次 302 重定向跳转,怪不得没有触发。 改成最终的跳转地址就可以自动答题了。 总结 不要只盯着 iframe 的 src 地址看,还得看网络请求里的真实地址,确认没有重定向。 技巧及坑 在福建和安徽 ...

阅读全文...

tampermonkey 读取 iframe 中的数据,判断网校 PPT 自动翻页结束

由于网校学习课程中的 PPT 总页数只能通过 iframe 中的数据才能获取到,所以只能处理 iframe。 tampermonkey 读取 iframe 中数据的操作要点 iframe src 路径加入 tampermonkey match iframe 的 html 也不一定是即时加载的,所以有必要定时或者 set timeout 读取数据 iframe 与主页面的数据共享 GM_set GM_get 来实现数据共享。 ...

阅读全文...

vcam 解决继续教育网校在线考试没有摄像头问题

在写一个继续教育网校自动考试答题的程序,但是我的台式机上没有摄像头,就无法开始考试。 解决方法 使用 vcam 软件,即虚拟摄像头。找一张图片,或者视频导入 vcam,这时就可以开始考试了。 注意,需要使用360安全浏览器,或者其他国产浏览器。因为谷歌浏览器已经不再支持 flash,而考试摄像头功能就是 flash 做的。 同样适用于网考摄像头没有正常启用的情况。 ...

阅读全文...

继续教育网校在线作业自动答题,并导出题库

继续教育网校在线作业做到自动答题其实很容易。 答案收集 只需要使用 tampermonkey,每次提交在线作业,然后收集题干和答案, 使用 gm_setValue 保存到 Chrome 的本地数据存储 levelDB 中即可。 key 为题干,value 为答案。这里的答案不做格式转换,方便导出时的可读性。 考题自动找答案 遍历所有考题,gm_getValue 获取答案即可。 注意,模拟点击的时候,设置 timeout,否则后台服务器响应不过来,容易造成答案丢失。 特别是多选题,容易出现此问题。 判定是否合格 全局设置可接受的错题数,e.g. 1题、2题。 实际上,经测试无此必要,即便要达到满 ...

阅读全文...

网校自动挂学时,Tampermonkey 点击 alert 弹窗中的确定按钮

在做一个成人自考网校的自动学习、挂学时插件,但是在提交问题答案的时候,会弹出一个 alert 窗口,点击确定按钮之后,才能提交。 alert 窗口与普通的网页还是有区别的,因为无法在浏览器 console 中查看,所以也就无法采用 document.querySelector 的方式进行自动 click 处理。 所以,要实现自动答题,就得能绕过这个 alert 确认窗口。 实现方法 覆盖 window.alert 方法: @grant unsafeWindow unsafeWindow.alert = function(){return false}; window.alert ...

阅读全文...

tampermonkey onclick 无效,显示 xxx is not defined

使用 tampermonkey 在当前网页中添加了一个按钮,用于手动触发自动化逻辑。 <button id="tm_btn" onclick="do_something()">开始抢购</button> do_something 函数,是我在 tampermonkey 脚本中定义的函数。 但是,点击按钮之后,报错: Uncaught ReferenceError: do_something is not defined at HTMLButtonElement.onclick 为何会找不到函数定义 原因是,tamper ...

阅读全文...

tampermonkey 上传 Blob 文件到其他服务器,multipart/form-data 版

application/octet-stream 版本的缺陷: 无法增加多余参数。例如,我想顺便传递用户名,就没法增加字段了 搜了半天没找到 Spring Boot 读取 application/octet-stream 的实现。。。 所以干脆想尝试 multipart/form-data 版。 Java Spring Boot 如何获取 application/octet-stream 二进制数据 { "timestamp": "Feb 1, 2021, 03:18:55 PM", "status": 415, ...

阅读全文...

tampermonkey 上传 Blob 文件到其他服务器,application/octet-stream 版

例如,我想将 https://www.sunzhongwei.com 网页中下载到的 Excel 文件,上传到其他服务器。这里以 http://localhost:5000 为本地测试环境。 tampermonkey 中是否可以使用 fetch / jQuery ajax 还是必须使用 GM_xmlhttpRequest ? 测试了一下,用 fetch 确实不行,必须使用 GM_xmlhttpRequest 。 以下是使用 fetch 的报错信息,估计使用 jquery ajax 也是同样的结果。 Access to fetch at 'http://localhost:5000/' from ...

阅读全文...

tampermonkey 代码规范与组织结构

修改几年前给媳妇写的一个 tampermonkey 自动挂会计网校学时的插件。由于只是网校的页面做了些许修改,其实代码需要调整的地方不多。但是发现已经看不懂了,逻辑混乱,无从下手。 赶上元旦假期,时间充裕,所以思考了一下,怎样组织 tampermonkey 的代码,可读性更高,最好能形成代码规范,以后再调整时,可以瞬间秒懂。 代码结构 分成三大部分,之间用注释块隔开。 全局配置变量 自动逻辑。引入类 route 机制,多页面逻辑清晰。 公用函数 多文件还是单文件 例如要在一个网站里,多个页面间跳转,还是单文件比较好。原因: 逻辑清晰 函数可复用 可复用代码 还是做 vim snippe ...

阅读全文...

tampermonkey 跨域名共享数据的方法

在使用 tampermonkey 挂学时时,遇到一个问题。课程列表页与视频页所属不同二级域名,导致这两个页面对应的 tm 脚本无法共享 cookie。 在查解决方案时,查到 tm 自带的 gm set get value 函数,可以跨域共享数据,但前提是读写都在一个 tm 脚本中。 参考: http://greasemonkey.win-start.de/advanced/gm_getvalue.html Data stored with GM_setValue and retrieved with GM_getValue are similar to browser cookies, bu ...

阅读全文...

tampermonkey 悬浮框显示状态面板

在写 tampermonkey 网页工具时,经常会用 console log 来输出状态日志,方便了解进度,或者调试。 但是对于普通用户来说,这不太友好。还是能将进度信息显示在页面上比较直观。特别是对于用来自动挂学时的插件来说,没有这个状态显示,你很难知道插件是否因为页面改版导致挂了。。。 所以参考了一个网上的脚本,写了一个测试程序。功能是,记录在当前页面停留了多长时间。 以百度首页为例,这个悬浮框状态面板会显示在页面右下角,每秒更新。 这个 div 还是透明的,也不影响正常浏览。 测试代码 // ==UserScript== // @name test_status_win ...

阅读全文...

提升 Tampermonkey 脚本代码可读性的反思

晚上看了一段几年前写的会计网校自动挂学时的 Tampermonkey 脚本。 我发现可读性太差了,要修改功能的时候,逻辑梳理起来异常痛苦。 为何痛苦 自动挂学时其实原理很简单,就是模拟正常的点击操作。 但是,我的代码存在几个问题 代码头部一堆公共函数,而真正的逻辑在后面,看起来特别别扭 代码全是各种遍历 tr, td 的操作,然后各种 1,2, 3 判断,不知所云 面向逻辑编程,而不是面向 HTML 编程 解决方法 封装好功能,函数名可读性好。不要在循环里处理各种逻辑 公共函数置后 更多注释。难说一个脚本不会为何10年。。。 全局 debug 开关,方便直观的看到问题出在哪里。或者封装一 ...

阅读全文...

对 Tampermonkey GM_xmlhttpRequest 发送的 HTTP 请求进行调试

使用 Tampermonkey GM_xmlhttpRequest 循环提交几十次数据,服务器均报 500 异常时,会发现之后,再提交数据 console 中不再出现报错信息 服务器端 Nginx 中也没有请求日志 所以推测 Chrome 对请求进行了拦截。 在哪里能看到 HTTP 请求的报错信息 右键点击 tampermonkey 插件,选择“管理扩展程序”,在弹出的窗口中,点击 background.html 此时就能看到 HTTP 的错误信息了。 Failed to load resource: Request throttled Chrome 报的错误是这个,果然是被拦截了。网上 ...

阅读全文...

Tampermonkey Javascript 使用 window.close() 关闭当前 tab 页

一个自动化操作的需求,在新的 tab 页完成任务之后,使用 Tampermonkey 关闭这个 tab 页。 在当前最新版 Chrome 版本 70.0.3538.102(正式版本) (64 位)中测试 window.close() VM750:1 Scripts may close only the windows that were opened by it. 也就说,window.close() 只能关闭由 js 打开的窗口。如果这个窗口不是由 js 打开的,那就没有权限关闭。 function closeTab(){ window.open('', '_self', ''); ...

阅读全文...