Tampermonkey

分类下相关文章

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', ''); ...

阅读全文...

Tampermonkey 切换 select 下拉框

VueJS 现在越来越流行,用 vuejs 的网站也越来越多,导致我想自动挂个学时都得费点周折。 例如,课程列表会随着选择的 select 下拉框不同的年份,展示不同的数据。 要想遍历到所有年份的课程数据,实现的方法 // 获取历年切换 var years = $('select[name="plans"] option').length; GM_log("共计" + years + "年的课程"); for (var year = 0; year < years; year++) { // 间隔时间去获取课程列表 (fu ...

阅读全文...

Tampermonkey 数据存储之 GM_setValue / GM_getValue

Tampermonkey 存储临时数据,之前只用过 cookie 的读存方式,非常麻烦。 看一下内置的 GM_setValue / GM_getValue GM_setValue(name, value) Set the value of 'name' to the storage. GM_getValue(name, defaultValue) Get the value of 'name' from storage. 简单测试 // ==UserScript== // @name New Userscript // @namespace http://tampermo ...

阅读全文...

tampermonkey 设置页面 cookie

之前搞定了tampermonkey 获取 cookie, 现在需要设置 cookie 的方法 function setCookie(c_name, value, expiredays) { var exdate = new Date(); exdate.setDate(exdate.getDate()+expiredays); document.cookie = c_name + "=" + escape(value) + ((expiredays==null) ? "" : ";expi ...

阅读全文...

tampermonkey 触发 vuejs 网页中 input 控件的 v-model 双向同步

在 tampermonkey 模拟自动提交数据 $('input[placeholder="text1"]')[0].value = 1; $('input[placeholder="text2"]')[0].value = 2; $('.submit .btn')[0].click(); 运行之后,总是提示,没有填写数据。。。 看了一下页面中的 js,发现提交部分是用 vuejs 写的,input 的值存储在 vuejs data 的变量中。 理论上,input 是设置了 v-model 双向绑定,数据在填写之后会自动同步到 data 相应变量中。 ...

阅读全文...

tampermonkey 调用三方域名下的 HTTP 接口

示例 Get 请求 // @require https://cdn.staticfile.org/jquery/1.9.1/jquery.min.js // @grant GM_xmlhttpRequest // @connect sunzhongwei.com GM_xmlhttpRequest ( { method: "GET", url: "http://xxx.sunzhongwei.com/api/get_something", onload: function (respons ...

阅读全文...

tampermonkey 中使用 jQuery 模拟鼠标点击

例如点击一个按钮 $('.btn-wrap a')[0].click(); 注意 $('.btn-wrap a').click(); 在 chrome console 中可以触发 vuejs 的 click 事件,但是在 tampermonkey 中无法触发。 修改成 $('.btn-wrap a')[0].click(); 即可。 直接模拟点击比修改属性好在哪里 例如,勾选一个 checkbox 勾选框,可以这样做 $($('input[name=qa]')[0]).prop('checked', true); 但是,如果目标网站是用的 vuejs 之类的,在 input 上绑定了各 ...

阅读全文...

tampermonkey 当前页面跳转后没有触发新页面对应逻辑

现象 页面 A: https://www.sunzhongwei.com/#/coding 页面 B: https://www.sunzhongwei.com/#/sleeping 页面 B 的内嵌 iframe 页面 C: https://www.sunzhongwei.com/dreaming 对页面 C 做了 tamermonkey 规则,即跳转到页面 A: window.top.location.href = 'https://www.sunzhongwei.com/#/coding'; 但是跳转之后,页面 A 对应 tampermonkey 逻辑并没有执行 if (window ...

阅读全文...

tampermonkey 作用于页面内 iframe 时,将页面地址修改的方法

正确的做法 window.top.location.href = 'https://www.sunzhongwei.com'; 错误的做法 window.location.href = 'https://www.sunzhongwei.com'; 这样只会修改 iframe 的页面内容,而其宿主页面并不会改变。 查看页面 frame 层级 Chrome - Application - Frames ...

阅读全文...

终止当前正在运行的 tampermonkey 脚本

例如,我要遍历一个 list,若其中一行包含某个状态,则跳转到下一页。 实现方法是在修改 window.location.href 之后,抛出个异常,即可终止当前 tampermonkey 脚本。 $('li').each(function (index, item) { var url = base_url + $(item).attr('href'); var spans = $(item).find('something2'); if ($(spans[2]).text().trim() != '三个广告牌') { GM_log(url); ...

阅读全文...

tampermonkey 获取页面 cookie

获取页面 cookie 的方法 function getCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c ...

阅读全文...

近期节日

2020年07月11日 世界人口日
2020年07月22日 大暑
2020年07月30日 非洲妇女日
2020年08月01日 八一建军节
2020年08月06日 国际电影节
2020年08月07日 立秋
2020年08月15日 日本投降日
2020年08月22日 处暑
2020年08月25日 七夕
2020年09月02日 中元节
2020年09月03日 抗日胜利纪念日
2020年09月07日 白露
查看更多节日