分类下相关文章
2021-01-02 · 阅读 147 · 字数 275
修改几年前给媳妇写的一个 tampermonkey 自动挂会计网校学时的插件。由于只是网校的页面做了些许修改,其实代码需要调整的地方不多。但是发现已经看不懂了,逻辑混乱,无从下手。 赶上元旦假期,时间充裕,所以思考了一下,怎样组织 tampermonkey 的代码,可读性更高,最好能形成代码规范,以后再调整时,可以瞬间秒懂。 代码结构 分成三大部分,之间用注释块隔开。 全局配置变量 自动逻辑。引入类 route 机制,多页面逻辑清晰。 公用函数 多文件还是单文件 例如要在一个网站里,多个页面间跳转,还是单文件比较好。原因: 逻辑清晰 函数可复用 可复用代码 还是做 vim snippe ...
2020-06-21 · 阅读 809 · 字数 426
在使用 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 ...
2020-06-13 · 阅读 973 · 字数 419
在写 tampermonkey 网页工具时,经常会用 console log 来输出状态日志,方便了解进度,或者调试。 但是对于普通用户来说,这不太友好。还是能将进度信息显示在页面上比较直观。特别是对于用来自动挂学时的插件来说,没有这个状态显示,你很难知道插件是否因为页面改版导致挂了。。。 所以参考了一个网上的脚本,写了一个测试程序。功能是,记录在当前页面停留了多长时间。 以百度首页为例,这个悬浮框状态面板会显示在页面右下角,每秒更新。 这个 div 还是透明的,也不影响正常浏览。 测试代码 // ==UserScript== // @name test_status_win ...
2020-03-20 · 阅读 740 · 字数 258
晚上看了一段几年前写的会计网校自动挂学时的 Tampermonkey 脚本。 我发现可读性太差了,要修改功能的时候,逻辑梳理起来异常痛苦。 为何痛苦 自动挂学时其实原理很简单,就是模拟正常的点击操作。 但是,我的代码存在几个问题 代码头部一堆公共函数,而真正的逻辑在后面,看起来特别别扭 代码全是各种遍历 tr, td 的操作,然后各种 1,2, 3 判断,不知所云 面向逻辑编程,而不是面向 HTML 编程 解决方法 封装好功能,函数名可读性好。不要在循环里处理各种逻辑 公共函数置后 更多注释。难说一个脚本不会为何10年。。。 全局 debug 开关,方便直观的看到问题出在哪里。或者封装一 ...
2018-12-17 · 阅读 6294
使用 Tampermonkey GM_xmlhttpRequest 循环提交几十次数据,服务器均报 500 异常时,会发现之后,再提交数据 console 中不再出现报错信息 服务器端 Nginx 中也没有请求日志 所以推测 Chrome 对请求进行了拦截。 在哪里能看到 HTTP 请求的报错信息 右键点击 tampermonkey 插件,选择“管理扩展程序”,在弹出的窗口中,点击 background.html 此时就能看到 HTTP 的错误信息了。 Failed to load resource: Request throttled Chrome 报的错误是这个,果然是被拦截了。网上 ...
2018-11-28 · 阅读 6520
一个自动化操作的需求,在新的 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', ''); ...
2018-11-25 · 阅读 4328
VueJS 现在越来越流行,用 vuejs 的网站也越来越多,导致我想自动挂个学时都得费点周折。 例如,课程列表会随着选择的 select 下拉框不同的年份,展示不同的数据。 要想遍历到所有年份的课程数据,实现的方法 // 获取历年切换 var years = $('select[name="plans"] option').length; GM_log("共计" + years + "年的课程"); for (var year = 0; year < years; year++) { // 间隔时间去获取课程列表 (fu ...
2018-11-23 · 阅读 10222
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 ...
2019-01-17 · 阅读 5565
之前搞定了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 ...
2018-10-19 · 阅读 5245
在 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 相应变量中。 ...
2018-12-17 · 阅读 5209
示例 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 ...
2018-10-17 · 阅读 8047
例如点击一个按钮 $('.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 上绑定了各 ...
2018-10-14 · 阅读 4379
现象 页面 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 ...
2018-10-13 · 阅读 4213
正确的做法 window.top.location.href = 'https://www.sunzhongwei.com'; 错误的做法 window.location.href = 'https://www.sunzhongwei.com'; 这样只会修改 iframe 的页面内容,而其宿主页面并不会改变。 查看页面 frame 层级 Chrome - Application - Frames ...
2018-09-15 · 阅读 3932
例如,我要遍历一个 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); ...
生活 | 跑步 清单 足球 鲁班 探索 孤独的美食家 驾驶 电视剧 收纳 健康 game 电影 周末 |
---|---|
Geek | 健身 Laravel Git Vim MySQL Linux UI Windows SVN 纪录片 管理 Shell 游记 工具 手机 BackboneJS 自建博客 Mac DNS Tornado CDN Django Python AngularJS 理财 前端 Nginx 爬虫 Redis Javascript Browser 浏览器 推广 OAuth CSS PHP Social Networks 安全 运维 创业 杂记 VueJS Android Image IDE Java ReactJS 数据分析 SQLite RESTful 读书笔记 家电 ecshop Vagrant wordpress docker SEO GTD magento mongodb nodejs weex 冷知识 ruby iOS 微信小程序 AI CMS 快应用 backpack 广告联盟 OA 短信 UWP Win CSharp Tampermonkey graphviz 钉钉 WPS 数据字典 微信公众号 Fuchsia Adobe XD SQL Server thinkphp 代码规范 商业模式 Flutter serverless 视频制作 国际化 golang 服务器 Kotlin 网站建设 5G 笔记本 图片 spark spring |
成长的烦恼 | 闲言碎语 待产 奶爸 不睡觉 写作 程序员 孙心然语录 |
地球 | 植物 时间 中文 赚钱 国家地理 烟台 一生伏首拜阳明 emoji 头痛的问题 弟子规 英文 国际贸易 |
不三 4天前
这个Site Search实现方式确实简单粗暴有效,大哥能不能发个教程呢?