油猴脚本编写

准备

Tampermonkey 官网:
https://www.tampermonkey.net/

官方文档:
https://www.tampermonkey.net/documentation.php?ext=dhdg

参考教程:
https://www.bilibili.com/video/BV1Ng411E7DA?p=4

参考API:
https://www.w3.org/TR/clipboard-apis/#async-clipboard-api
https://developer.mozilla.org/zh-CN/docs/Web/API/Clipboard/readText

此处使用 Microsoft Edge 浏览器。

获取扩展:
在这里插入图片描述
点这个扩展,然后打开加载项:
在这里插入图片描述
进入官方扩展页面:
https://microsoftedge.microsoft.com/addons/Microsoft-Edge-Extensions-Home

第一个简单的脚本

在这里插入图片描述
点击 + 号,开始编写:
在这里插入图片描述
match 匹配的网站(url),name 脚本名字,namespace 管理的空间,icon 脚本的小图标,grant 一些权限方面的…

match 有正则的规则,填 * 则都可以匹配。

这些都是 Tampermonkey 自己的配置参数,不能去掉注释。

获取新脚本

在这里插入图片描述
在这里插入图片描述
Greasy Fork:https://greasyfork.org/zh-CN

正式学习编写

引入 jQuery 在脚本中:需要用到 @require
在这里插入图片描述
操作可以用 jQuery 也可以用原生的 JavaScript

可以参考:原生JS获取HTML DOM元素的8种方法

在这里插入图片描述
为了正确选择到 nextElementSibling,即需要先加载出页面再选择,所以用 window.onload = function() 包起来。

额外可以参考

油猴脚本编写教程

我的练习

1. b站获取视频选集名称

最近在看 GAMES103,结果这个视频选集这里的文字很难显示全,总之就是麻烦。

在这里插入图片描述
于是我写了一个小脚本去输出打印所有的分集名字。

脚本如下:

// ==UserScript==
// @name         b站获取视频分集名字
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       hebohang
// @match        https://www.bilibili.com/video/*
// @icon         https://www.google.com/s2/favicons?domain=bilibili.com
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    setTimeout(function(){
        var parts = document.getElementsByClassName('part');
        for (var idx = 0; idx < parts.length; idx++)
        {
            console.log(parts[idx].innerText);
        }
    }, 5000)
})();

执行效果:
在这里插入图片描述
踩坑:

一开始用的 setInterval ,结果就是循环执行了,于是改用 setTimeout,后来干脆把 500 改成 5000,即5秒后执行,这样是为了确保Dom节点树已经被加载解析了,不然 document.getElementsByClassName 很可能会失败。

并且一开始我用 window.onload 想实现这样的功能,也不行,还是得用 setTimeout。

2. csdn 写文章去图片水印

csdn的图片去水印,只需要把后面的 ? 那一大串去掉就行了,于是我写了一个简单的脚本:

// ==UserScript==
// @name         csdn 写文章去图片水印
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  csdn 写文章去图片水印
// @author       hebohang
// @match        https://editor.csdn.net/*
// @icon         https://www.google.com/s2/favicons?domain=csdn.net
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    setInterval(function(){
        var parts = document.getElementsByClassName('token cl cl-src');
        for (var idx = 0; idx < parts.length; idx++)
        {
            var str = parts[idx].innerText;
            var index = str.indexOf('?');
            if (index != -1)
            {
                var new_str = str.substring(0, index);
                parts[idx].innerText = new_str;
            }
        }
    }, 5000)
})();

注意,这里我就用了 setInterval ,每5秒检测一下所有图片,然后去水印。

3. csdn 浏览图片去水印

// ==UserScript==
// @name         CSDN 浏览图片去水印
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       hebohang
// @match        https://blog.csdn.net/*
// @icon         https://www.google.com/s2/favicons?domain=csdn.net
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    setInterval(function(){
        var parts = document.getElementsByTagName('img');
        for (var idx = 0; idx < parts.length; idx++)
        {
            var str = parts[idx].src;
            var index = str.indexOf('?');
            if (index != -1)
            {
                var new_str = str.substring(0, index);
                parts[idx].src = new_str;
            }
        }
    }, 5000)
})();

本来想用 setTimeout ,但是想了一下图片可能没加载出来,还是设置循环算了,也不占性能。

随便找了一个网站测试:
在这里插入图片描述
结果:
在这里插入图片描述
ohhhhh!

4. csdn 写文章自动解析链接

// ==UserScript==
// @name         csdn 写文章自动解析链接
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  csdn 写文章自动解析链接
// @author       hebohang
// @match        https://editor.csdn.net/*
// @icon         https://www.google.com/s2/favicons?domain=csdn.net
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    setInterval(function(){
        var parts = document.getElementsByClassName('token p');
        for (var idx = 0; idx < parts.length; idx++)
        {
            var str = parts[idx].innerText;
            var index = str.indexOf('https://');
            if (index == -1)
            {
                index = str.indexOf('http://');
            }
            if (index != -1 && str[index - 1] != '[')
            {
                var new_str = "[" + str + "](" + str + ")";
                parts[idx].innerText = new_str;
            }
        }
    }, 3000)
})();
  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值