首页 > 其他分享 >如何开发一个油猴脚本- 从零开始编写一个油猴脚本

如何开发一个油猴脚本- 从零开始编写一个油猴脚本

时间:2022-10-27 12:01:47浏览次数:101  
标签:脚本 button 点赞 从零开始 csdn 按钮 油猴

前言

之所以开发这个插件,是因为昨天在知乎看了一篇文章:为什么CSDN上很少人会去给文章点赞?,我引用一下其中一个答主的回答:

只有我自己写博客了,我才发发现这个问题,阅读几百上千,评论0,点赞 0 。可能是点赞的按钮不明显,我说说我自己看csdn博客的情况:程序遇到问题,网上查一下,按csdn的博文操作,没效果,关了继续查,有效果,继续工作。就这样了,很少去点赞,就算查了非常久的问题,结果发现在某个博主那里得到解决,也会留个评论吐槽顺便支持下博主,还是不会点赞。

这情况和我本人差不多,每次遇到问题,有时要看好几篇博文才能解决问题,而这几篇博文中恰好只有一篇才是最有价值的,也就是能解决我的问题的那篇,但是解决问题总不能白嫖吧?
至少点个赞或者留个评论如“博主666”之类的。
但是呢查文章多了发现写评论是真的浪费时间,于是我想,不如我把我一些评论事先写好,遇到对我有帮助的博文再一键点赞评论,说干就干,于是花了一点点时间就写好了这个脚本。


开发脚本之前的准备工作

1.什么是油猴(Tampermonkey )

首先,油猴油猴脚本有什么区别?
Tampermonkey 就是一款免费的浏览器扩展和最为流行的用户脚本管理器,它适用于 Chrome, Microsoft Edge, Safari, Opera Next, 和 Firefox 等等。你安装后你的浏览器不会发生任何变动,直到你开始安装一种叫做油猴脚本(用户脚本)的东西。

油猴脚本一般指用户脚本(User Script),ta 是一段 Javascript 代码,它们能够优化您的网页浏览体验。一般有包含但不限于以下几种功能:

  • 能为网站添加新的功能,比如本篇博文所介绍的csdn 手动一键点赞评论脚本。
  • 能使网站的界面更加易用,比如一些改变网站样式、排版的脚本等。
  • 能隐藏网站上烦人的部分内容,比如一些去广告的脚本。

博主日常用的比较多的油猴脚本网站:https://greasyfork.org/zh-CN/


2.安装油猴(Tampermonkey )

油猴官方下载地址:http://www.tampermonkey.net/
在这里插入图片描述
点进去你会发现上面有各个浏览器的选项;而下面则是下载地址,油猴扩展有两个版本,一个 stable 版本,一个 beta 版本,顾名思义,一个是稳定版,一个是测试版。下载稳定版就好了。

油猴支持的浏览器有 Chrome, Microsoft Edge, Safari, Opera Next, Firefox,和 UC 浏览器等等,各大主流浏览器几乎都支持了。


3.新建一个油猴脚本

安装好油猴后,在浏览器工具栏上点击油猴添加新脚本
在这里插入图片描述

接着跳转到脚本编写界面
在这里插入图片描述

图里的代码头是自带的,叫做元数据。每个用户脚本都含有一段元数据,用来向 Tampermonkey 描述这个脚本自身的信息:脚本名,作者,描述,执行规则等等

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        http://*/*
// @grant        none
// ==/UserScript==
123456789

我粗略解释一下

// ==UserScript==
// @name         这里是你的编写的油猴脚本的名字
// @namespace    这个是命名空间;用来区分名称相同但是作者不同的用户脚本,一般都是写作者的个人网址,没有也可以写你的博客地址
// @version      0.1  这个是版本号
// @description  这个是功能描述,描述你的这个脚本是用来干嘛的
// @author       这个是作者的名字,比如我:mukes
// @match        这个是该脚本匹配的网址,支持通配符匹配
// @include		 这个也是该脚本匹配的网址,支持通配符匹配
// @exclude		 这个和 iclude 配合使用,排除匹配到的网址,优先于 include
// @grant        none 
// ==/UserScript==
1234567891011

match 和 include 是有一点区别的,区别在这?match更严格一点,它对 * 角色的含义设定了更严格的规则,详情点击这里

关于元数据更详细介绍:点击这里 或者 点击官方博客介绍

如果你不会 不想自己写一个脚本的话,那你可以去 油猴脚本网站 搜索你需要的脚本。


脚本需求分析迭代过程

我不是做好需求分析再写代码的,因为当时脑子里面只有一个朦胧的概念而已,我就打算边写边实践边改代码。

v0.1.0版本
一开始的插件是一点开博文就自动点赞和评论
然后我发现我打开自己的博文也会点赞评论…我去,不行,得改( ̄. ̄)


v0.1.0版本
在脚本文件头加了排除自动点赞评论自己博文的一行代码

// @exclude      https://blog.csdn.net/mukes/article/details/*
1

刷着刷着博文,我发现一刷新页面又会自动评论Σ( ° △ °|||)︴,那我刷新几次岂不是就会评论几次?不行,得改( ̄▽ ̄)"


v0.3.0 版本
本来想写一个函数判断自己是否评论点赞了。结果突然冒出来一个想法:有一些文章对我零作用啊,我不想点赞和评论 >_<,为什么不改成手动一键点赞评论?so~此版本 卒╮(╯▽╰)╭


v0.4.0 版本
在浏览器页面添加一个按钮,直接把自动点赞评论改为手动点击在这里插入图片描述
虽然我前端渣得要死,但是我也知道这个按钮是真的丑,又得改╮( ̄▽ ̄)╭


v0.5.0 版本
我又双叒叕发现了一个问题,这个按钮固定在标签页的话,如果我阅读到文章末尾,那我岂不是又要按 “home” 键回到文章开头再点赞???能一步就一步,干嘛要变成两步呢?(>_<)

于是我找啊找,呀嘿~发现了 ≧◇≦
在这里插入图片描述

如何所示,csdn 博文页面一共有两个地方在阅读滑动鼠标的时候仍然保持不动的
那么选择哪里放按钮就显而易见了

按钮改了位置后,发现样式和csdn 自带的不一致(似乎混进了一个奇怪的东西 ):
似乎混进了一个奇怪的东西

留着 v1.0.0 版本再改吧,我已经看到胜利在向我招手了 b( ̄▽ ̄)d


v1.0.0 版本
此处插播一条消息:关于以上版本号为何这般命名,请参考我的另一篇博文:版本号命名规则
要改和网页端一样的样式的话,那就需要用到一个神奇的按键 F12 了,用谷歌浏览器打开博文:https://blog.csdn.net/mukes/article/details/103480696,点击 F12 ,跳出 DevTools 工具窗口,如下图:
-1

点击图中的箭头
然后再把鼠标移动到网页上一键三连这个元素上
img

由上图就可以获得很多信息了,比如 一键三连这个按钮的宽和高是74x28
背景颜色是#E33E33,字体颜色为#FFFFFF

想要看更具体的信息只需要点击一下该元素,然后在 DevTools 窗口中会自动跳到对应该元素的代码,而窗口的右边则是该元素详细的样式信息。
在这里插入图片描述

在样式我们又可以知道 一键三连 这个元素的圆角的边框属性为:border-radius: 4px;
因此我们只需要改我们这个插件按钮的:
宽和高,字体颜色,底色,以及圆角边框的属性就可以了,其他的细节就不用扣了。

button.style.width = "90px"; //按钮宽度
button.style.height = "20px"; //按钮高度
button.style.align = "center"; //文本居中
button.style.color = "white"; //按钮文字颜色
button.style.background = "#b46300"; //按钮底色
button.style.borderRadius = "4px"; //按钮四个角弧度
123456

最终代码

// ==UserScript==
// @name          csdn 手动一键点赞评论
// @namespace     https://blog.csdn.net/mukes
// @version       0.0.6
// @description  打开博文,点击一键点赞评论按钮后自动为该博文点赞以及评论,前提是已经登录 csdn 博客
// @author       mukes
// @include      *://blog.csdn.net/*/article/details/*
// @include      *.blog.csdn.net/article/details/*
// ==/UserScript==
(function() {
    'use strict';
    var button = document.createElement("button"); //创建一个按钮
    button.textContent = "一键点赞评论"; //按钮内容
    button.style.width = "90px"; //按钮宽度
    button.style.height = "28px"; //按钮高度
    button.style.align = "center"; //文本居中
    button.style.color = "white"; //按钮文字颜色
    button.style.background = "#e33e33"; //按钮底色
    button.style.border = "1px solid #e33e33"; //边框属性
    button.style.borderRadius = "4px"; //按钮四个角弧度    
    button.addEventListener("click", clickBotton) //监听按钮点击事件
    
    function clickBotton(){
        setTimeout(function(){

        var comment=["针不戳呀,写的针不戳!","学习了!b( ̄▽ ̄)d","本文不错( ̄ˇ ̄),值得学习!(= ̄ω ̄=)","感谢博主的分享!(^ ^)/▽▽\(^ ^)","感谢博主,你的文章让我得到一些收获!( ̄ˇ ̄)"];
        var STARTNUMBER = -1;
        var ENDNUMBER = 5;
        var temp_count = Math.floor(Math.random()*(STARTNUMBER-ENDNUMBER+1))+ENDNUMBER ;//取STARTNUMBER-ENDNUMBER之间的随机数 [STARTNUMBER,ENDNUMBER]

        document.getElementsByClassName("tool-item-comment")[0].click(); //打开评论区
        document.getElementById("comment_content").value = comment[temp_count]; //随机把一条预先写好的评论赋值到评论框里面
        document.getElementsByClassName("btn-comment")[0].click(); //发表评论
        document.getElementById("is-like").click() //点赞。把该代码注释后只会一键评论

},100);// setTimeout 0.1秒后执行
    }


    var like_comment = document.getElementsByClassName('toolbox-list')[0]; //getElementsByClassName 返回的是数组,所以要用[] 下标
    like_comment.appendChild(button); //把按钮加入到 x 的子节点中
    
})(); //(function(){})() 表示该函数立即执行
12345678910111213141516171819202122232425262728293031323334353637383940414243

最终效果:
在这里插入图片描述
动态展示效果:
在这里插入图片描述
ps:如果你觉得博主写得针不戳的话,欢迎点赞收藏 ~(゜ - ゜) つロ 干杯~
如有疑问,欢迎留言讨论~
pps:如何想测试脚本可行性的话,欢迎在此界面测试,同时也把你的个性留言秀出来吧๑乛◡乛๑

最后:
感谢以下 3 位博主在我编写这个脚本时做出的巨大贡献:
https://blog.csdn.net/u010598445/article/details/108880602
https://blog.csdn.net/jayandchuxu/article/details/79113755
https://dyqdzh.blog.csdn.net/article/details/107399298

官方文档
https://www.tampermonkey.net/documentation.php

标签:脚本,button,点赞,从零开始,csdn,按钮,油猴
From: https://www.cnblogs.com/little-monster-lhq/p/16831731.html

相关文章

  • b站 bilibili 哔哩哔哩 js小脚本 油猴 查找搜索某年的视频 自动翻页
    varccount=0;varnumnum=5constsleep=(delay)=>newPromise((resolve)=>setTimeout(resolve,delay))while(numnum--){  document.querySelect......
  • jmeter部分脚本执行失败但jenkins构建结果依然成功
    jmeter部分脚本执行失败,但jenkins构建结果依然成功--处理方法 使用jenkins构建执行脚本的时候,大家可能遇到过:明明部分脚本执行失败,但是收到的邮件结果依然是构建成功呢,......
  • mysql学习---简单的数据库初始化脚本和sql分析
    1、创建库、表、权限等DROPDATABASEIFEXISTS`KMS_DB`;CREATEDATABASEIFNOTEXISTS`KMS_DB`CHARACTERSET`utf8`COLLATE`utf8_general_ci`;/*characterset,数......
  • etcdctl 查看 etcd 集群状态或者数据脚本
    #!/bin/bash#Author:MichaelLee#Email:[email protected]#Date:07/26/2022#Filename:etcd.sh#定义变量url="https://github.com/etcd-io/etcd/releases/downlo......
  • SHELL脚本
    一、shell脚本基本语法1、什么是shell   Shell是一个命令编辑器,它在操作系统的最外层,负责直接与用户进行对话,把用户输入的命令给操作系统,并处理各种各样的操作系统的......
  • Linux运维比较常用的一些脚本
    注意:根据不同系统的版本可能有些脚本的命令不是这样子使用,请悉知!!!根据PID过滤进程所有信息#!/bin/bash#Function:根据用户输入的PID,过滤出该PID所有的信息read-p"请......
  • JavaScripts 小脚本实现格式化打印
    consttext=String.raw`{"success":true,"code":0,"message":null,"body":{"items":[{"isNonStandard":false,"productId":1813,"skuNumber":"H00027","manufacturerPart......
  • 洛谷优秀油猴插件推荐
    前言转载自眭然的博客,有改编和新增下载链接油猴zip1.先打开edge浏览器的扩展(其他浏览器应该也可以加扩展,不过edge最好)2.打开开发者模式和允许来自其他应用商店的......
  • linux 前端部署 tomcat 脚本
    前提:打包后的文件位置:/home/usr/back目的部署位置:/home/usr/prod1目的部署位置:/home/usr/prod2 在linux服务器上新增文件deploy-web.sh,并运行shdeploy-web.sh......
  • python制作django批量创建数据离线脚本
    scripts/init_news.pyimportosimportsysimportdjango#准备base_dir=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))sys.path.append(base_dir......