"油猴脚本""篡改猴"领域的一些基本常识
本文简要介绍本人对"油猴脚本","篡改猴"领域的一些见解,内容注定不可能一步到位和事无巨细,欢迎各位仁人志士对我批评指正,提出意见建议.另外转载前请务必注明作者,否则统统视为侵权处理.
- 浏览器中有三个东西:插件,扩展和脚本,其中,
插件权限最大,不受浏览器约束,可以读写本地文件,可视为和普通软件(如qq,浏览器)是同级的,如过去被广泛内置的flash播放器插件.
扩展权限其次,是在浏览器中安装的软件,如油猴,Adblock.扩展要从浏览器的要求出发,权限会被浏览器进行一些约束,同一个扩展在不同浏览器上可能变化很大.
脚本权限最低,因为受到各种安全策略的限制(如同源策略,本地文件读写策略,剪贴板安全策略等).通常只能在同源页面下做一些人畜无害的事情. - 网路上最常见的所谓"油猴扩展",大多数情况下指的是是Tampermonkey(篡改猴).油猴扩展(Greasemonkey)是篡改猴的祖先,篡改猴可视为升级版油猴,油猴是美国谷歌工程师闲着无聊写的,而篡改猴作者来自德国.另外还有一些类似功能的扩展,如国产的暴力猴和脚本猫...另外greasyfork.org是一个脚本托管网站(统称为油叉),本人认为也是脚本托管领域中影响力最大的网站,可惜2025年春节后被墙.sleazyfork.org则是成人版的greasyfork.org.
- 为什么油猴用不了了?
互联网行业日新月异,更新迭代飞快,网页也是在时刻动态变化的,昨天刚写的适配于这个网页的脚本,明天可能就失效了,如果想要抵消这种变化,就必须投入频繁的维护,这可不是一个小工作. - 对于1中提到的脚本权限低的问题,篡改猴其实也提供了一些绕过安全策略的操作,比如
GM_xmlhttpRequest
就可以规避同源策略;比如可以在设置里,选择"允许脚本读取本地文件"(Chrome浏览器有,Firefox不允许),这样就可以使用@require
包含本地js资源;又如通过修改内容安全策略(CSP)头信息选项,可以绕过某些网页CSP方面的安全限制,等等.总之篡改猴作为扩展,把一些扩展级别的权限慷慨下放给了脚本.另外,一切具体操作细节取决于篡改猴的版本(篡改猴有两个版本,黑色的稳定版和红色的开发版)和版本号,另外浏览官网更新日志(篡改猴官网:tampermonkey.net)和善用网上搜索可以更好认识此领域 - 如果脚本的作用时机错误,脚本就无法发挥作用,篡改猴在元数据区共设有以下作用时机
// @run-at document-start 网页加载开始前瞬间,是最早的时机,刚出现<html>时,此时机不易控制,不适合小白使用
// @run-at document-end 网页加载基本完成,局部内容如图片、视频等尚未加载完成,刚出现<body>时,可看作触发DocumentContentLoaded事件
// @run-at document-idle 网页加载全部完成,也是缺省时机,如果脚本没有提到加载时机,默认为此,可看作触发load事件
// @run-at context-menu 网页右键菜单栏,点击后执行脚本
当然以上只是提供的几类基础api,而实际情况会更复杂,比如很多网页使用了Ajax技术来灵活延迟网页加载过程,例如b站视频加载,百度搜索换页等,遇到以上情况需要自己琢磨适配的时机匹配思路,或是运用setTimeout、setInterval这样的简单延时函数,或是手写事件监听器、MutationObserver等对变化作出回调。
6. 作用域对于脚本同样是重中之重,作用域有误,脚本亦会成为摆设。篡改猴在元数据区共设有以下几类作用域:
// @include * 匹配全部网址,可以使用正则表达式,正在逐步淘汰此语法
// @exclude * 排除全部网址,可以使用正则表达式
// @exclude http*://www.example.com/*
// @match *://*/* 匹配全部网址,只能使用简单的星号匹配规则,不能使用正则表达式,未来的主流语法
// @match *://example.org/*
题外话,*://*/*
意为协议://域名/子路径,协议有http、https、ftp、file、moz-extension等类型,域名是把ip转为了便于人类记忆的字符串(一个域名可能映射多个ip),子路径则是域名下的分支路径。所谓同源策略(CORS策略)是指只要两个网址的协议/域名/端口号有任意部分不一致,就会判定为跨域,受到种种限制.
7. @grant
方面,篡改猴似乎正在提供两种不同的api,如存值就有GM_setValue
和GM.setValue
两种api,区别在于后者采用了Promise
实现异步操作.(本人对存值api的一大不满是返回undefined
而非设置的最新值),其他api同理,如GM_getValue
和GM.getValue
,GM_xmlHttpRequest
和GM.xmlHttpRequest
...异步操作也是未来的主流.另外,GM_info
/GM.info
是唯一一个无需授权就能使用的api;只有在metadata区使用@grant
声明了除none
以外的任何其他api后,才能调用unsafeWindow
.另外,关于标签页的授权api有GM.getTab
,GM.saveTab
,GM.getTabs
,本人对此所知甚少,欢迎交流学习.
"油猴脚本""篡改猴"领域的一些基本常识的更多相关文章
- Tampermonkey油猴脚本管理插件-最强浏览器插件的安装使用全攻略
对于接触过谷歌浏览器插件的“玩家”们来说,应该没有人没听说过Tampermonkey用户脚本管理器,也就是中文所说的“油猴”这个chrome插件了. 油猴号称全商店最强的浏览器插件绝非浪得虚名,一 ...
- [Chrome] 谷歌浏览器开启开发模式仍然无法安装油猴脚本
右键 > 属性 > 起始位置 > 添加 --enable-easy-off-store-extension-install 谷歌浏览器无法安装油猴脚本:--enable-easy-o ...
- 自用chrome+油猴脚本,使用迅雷下载百度云大文件,一键离线下载
油猴是有名的火狐浏览器插件(Greasemonkey),当然也有Chrome版本(tampermonkey),甚至IE.Safari.Opera都有……虽然这些插件是由不同的开发者开发出来的,界面也可 ...
- 使用 Sublime 或其他编辑器调试 Tampermonkey 油猴脚本
作者说由于 Chrome 安全限制,没办法调用外部编辑器调试,但提供了一个间接办法,那就是脚本中使用@require file:///引入本地文件的形式,具体的方法是 打开 chrome://exte ...
- [转帖]油猴脚本管理器 Tampermonkey v4.8 离线CRX安装包(谷歌浏览器版)
https://www.52pojie.cn/thread-1010604-1-1.html 油猴脚本管理器 Tampermonkey v4.8 离线CRX安装包(谷歌浏览器版) 链接:https:/ ...
- 浏览器插件之王-Tampermonkey(油猴脚本)
大家电脑都在使用浏览器,相信大家对浏览器插件也不陌生,浏览器插件是安装在浏览器里面,对浏览器功能进行拓展的脚本,现在的主流浏览器都有各种各样的插件如图: 这些插件让我们的上网方便了许多,有去广告的插件 ...
- 油猴脚本 之 网教通直播评论记录抓取 v2.0
先放一个 <油猴脚本 之 网教通直播评论记录抓取>那篇文章的传送门 . 修复内容 将所有表情转为 [符号表情] 字样,而非删除: 修复被禁言用户读取异常,现在被禁言用户表示为 张三 [已禁 ...
- 【接单】找我付费定制Python工具软件或网站开发、Chrome浏览器插件、油猴脚本
各位可付费找我定制Python工具软件或网站开发.Chrome插件.油猴脚本.自动化软件,可通过我做的软件来评判我的实力,一定要先和我沟通你的需求,做不了的我也不会接. 费用50元起,通过淘宝APP或 ...
- 如何使用油猴脚本不要vip就能观看各大视频网站如腾讯,爱奇艺等的vip视频
如何使用油猴脚本不要vip就能观看各大视频网站如腾讯,爱奇艺等的vip视频 首先打开谷歌商店(这里需要fq,如不能fq的小伙伴请看上面写的Chrome怎么访问外网) 搜索Tampermonkey,点击 ...
- 一款备受欢迎的用户脚本管理器插件TampermonKey-油猴脚本管理器安装与使用
Tampermonkey简介 Tampermonkey是一款备受欢迎的浏览器扩展和用户脚本管理器,它适用于目前各种主流浏览器. 方便的脚本管理(正在运行的脚本和可以运行的脚本在图标处显示一览无余) 脚 ...
随机推荐
- 记录socket的使用
今天记录一下socket的基本使用方法,直接上代码 initWebSocket() { //初始化weosocket const wsuri = "socket地址";//地址以w ...
- 一问一答学习PyQT6,对比WxPython和PyQt6的差异
在我的基于WxPython的跨平台框架完成后,对WxPython的灵活性以及强大功能有了很深的了解,在跨平台的桌面应用上我突然对PyQt6的开发也感兴趣,于是准备了开发环境学习PyQt 6,并对比下W ...
- Word文档转换成Html格式
CentOS 下安装 OpenOffice4.0 一.更新服务器 yum源 [root@APP2 /]# yum clean all [root@APP2 /]# yum makecache [roo ...
- runoob-scala
https://www.runoob.com/scala/scala-tutorial.html Scala 简介 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成 ...
- threejs 实现镜面反射,只反射指定物体,背景透明
一.背景 最近在做数字孪生项目,使用threejs渲染模型,UI要求地面反射建筑物,也就是模型要有倒影. 二.调研 在官网找到一个镜面反射的例子(https://threejs.org/example ...
- vue页面表格组件高度控制
//浏览器窗口内部高度console.log("window.innerHeight",window.innerHeight); console.log("documen ...
- 0515-BufferedInputStream缓存输入输出流
package A10_IOStream; import java.io.*; /* 作为IO流的入门,今天我们见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的 ...
- RocketMQ实战—5.消息重复+乱序+延迟的处理
大纲 1.根据RocketMQ原理分析为什么会重复发优惠券 2.引入幂等性机制来保证数据不会重复 3.如何用死信队列处理优惠券系统数据库宕机 4.基于RocketMQ的订单库同步为什么会消息乱序 5. ...
- Redis如何查看服务状态、关闭和启动
一.查看Redis服务状态 Linux命令: 查看redis服务进程,是否已经启动 1.ps -ef | grep redis 2.ps -aux | grep redis 3.netstat -tu ...
- 看图识WAF
看图识WAF 宝塔 腾讯云T-Sec 阿里云盾 创宇盾