从零做一个Chrome插件实现起点中文网自动签到

news/2024/7/10 0:21:24 标签: js, javascript, html, vue, java
htmledit_views">

这是我参与更文挑战的第1天,活动详情查看: 更文挑战

最近一直在起点中文网上看小说,忽然发现官方竟然卖自动签到卡,五块钱一个月!身为一个程序猿,怎么能花这些冤枉钱!

于是开始了写一个脚本的念头。

第一步:尝试规律性模拟点击按钮

图片中的‘已领取’在未领取前是一个红色的按钮!!

  1. 尝试了直接在控制台中写html" title=js>js,可行又不完全可行,因为每次点击完领取后刷新页面;只好另寻它路。
  2. 想来想去,就只能找一个插件来自动注入这段代码才行。所以,我改造了一个以前好久没用过的插件,将这段代码塞了进去。完美!好使!

但是这里还有一个问题,就是虽然是实现了,不过并没有去理解这个谷歌插件的开发方式,

第二步:全网搜索谷歌插件开发文档

经过一些搜索后,终于找到了目前最适合写这个脚本的文档。

英文文档最好找,谷歌一搜就可以搜到,需要翻墙。

中文文档就参差不齐了,最后找到一个非常优秀的博客,如果有需要可以去点个赞,【干货】Chrome插件(扩展)开发全攻略

第三步:开始着手开发,功能逻辑并不复杂,只是一种思路

代码我已经传到了GitHub上,各位如果有兴趣可以去start一下。链接在这:pxyzexp-qidian

代码目录如下:

*_locales: * 是为了国际化才引入的,这里其实不用引入,其他国家应该不会用起点看小说。

img:存放图标

html" title=js>js:html" title=js>js文件

background.html持续在后台运行的HTML(常驻)

manifest.html" title=js>json:核心配置文件了,这个最重要了

popup.html浏览器右上角图标显示的页面

重点说一下三个文件:manifest.html" title=js>json、content-script.html" title=js>js、popup.html

manifest.html" title=js>json(必有,插件所有配置参数均在这里面):

//这里是我的配置。
{
    "manifest_version": 2, // 清单文件的版本,这个必须写,而且必须是2
    "name": "pxyzexp-qidian", // 插件名称
    "version": "1.0.0",       //插件版本
    "description": "起点自动签到工具",
    "background": {           //插件后台
       "page": "background.html" 
    },
    "icons":                  //插件图标
    {
        "48": "img/icon.png",
        "128": "img/icon.png"
    },
    "browser_action":         //浏览器右上角图标设置
    {
        "default_icon": "img/icon.png",
        "default_title": "起点自动签到工具",
        "default_popup": "popup.html"  //浏览器右上角图标展示页面
    },
       "content_scripts": 
    [
        {
            // "<all_urls>" :匹配所有地址
            "matches": ["https://my.qidian.com/level/*"],
            // 多个JS按顺序注入
            "html" title=js>js": ["html" title=js>js/content-script.html" title=js>js"],
            // 代码注入的时间
            "run_at": "document_end"
        }
    ],
    // 默认语言
    "default_locale": "zh_CN"
}

content-script.html" title=js>js(html" title=js>js注入,自动点击按钮签到的脚本就这里面)

(function() {
    //定时点击,因为起点中文网签到的时候,会有时间限制,就挑了个最简单的方式,重复点击,对网页也不会造成什么负荷
    setInterval(function(){
        var demo = document.getElementById('elTaskWrap');
        var liEle = demo.getElementsByTagName('li');
        for(var i=0;i<liEle.length;i++){    
            var aEle = liEle[i].getElementsByTagName('a');
            if(aEle.length != 0){
                aEle[0].click();
            }
        }
    },1000);
    //定时刷新页面,防止页面卡死了,或者是计算出问题,没过一段时间刷新一下,重新开始。
    setInterval(function(){
        console.log(new Date()+"刷新");
        window.location.reload();
    },600000);

})();

popup.html(图标展示页面,一张图足以说明问题)

第四步:总结

一直想研究研究Chrome插件来着,苦于没有一个业务场景,这次也算是一次初体验,以后可能会有更多的需要也说不定。

欢迎大家去github那里start项目。。。。。。。。。。。。。。。

大家加油,青山不改,绿水长流,江湖再见。


http://www.niftyadmin.cn/n/902658.html

相关文章

高频面试题-说清楚Spring如何解决循环依赖?

这是我参与更文挑战的第2天&#xff0c;活动详情查看&#xff1a; 更文挑战 Spring的循环依赖问题一直是中高级Java高频面试题之一&#xff0c;其中的考点就在于你对Spring中bean的加载过程是否有一定的理解。 那么我们就以下几点说一下。 Spring中常用的注入方式有哪几种&…

面试题-js数组扁平化

这是我参与更文挑战的第3天&#xff0c;活动详情查看&#xff1a; 更文挑战 写在前面&#xff1a; 数组扁平化是指将一个多维数组变为一维数组&#xff0c;如&#xff1a; 将多维数组&#xff1a; [1, [2, 3, [4, 5]]] 转为一维数组&#xff1a; [1, 2, 3, 4, 5] 如何实现&am…

高频面试题-如何避免Redis中缓存穿透、缓存雪崩问题?

这是我参与更文挑战的第4天&#xff0c;活动详情查看&#xff1a; 更文挑战 Redis&#xff0c;因为其速度快等各方面的原因&#xff0c;被开发人员一直应用于企业级开发。 而一旦开始使用Redis&#xff0c;就必然要考虑的问题就当属缓存穿透、缓存雪崩的问题了&#xff0c;这也…

高频面试题-请把Java的双亲委派机制说清楚!

这是我参与更文挑战的第5天&#xff0c;活动详情查看&#xff1a; 更文挑战 如果面试官问你&#xff0c;类加载过程是哪几步&#xff1f; 巴拉巴拉巴拉...~~(加载、验证、准备、解析、初始化)~~ 见这小伙子面容惊奇&#xff0c;脸泛红光&#xff0c;不由自主的就问了一下双亲委…

高频面试题-请聊一下Spring中BeanFactory与FactoryBean的区别!

这是我参与更文挑战的第6天&#xff0c;活动详情查看&#xff1a; 更文挑战 如果你的简历上这么写&#xff0c;熟练掌握Spring&#xff0c;并对Spring源码有一定的见解(或者是读过Spring源码)&#xff0c;那么无法避免的就是要问几个问题。 IOC的实现原理是什么&#xff1f; AO…

高频面试题-请说一下线程的生命周期!

这是我参与更文挑战的第7天&#xff0c;活动详情查看&#xff1a; 更文挑战 这算是一个关于线程的基础问题了&#xff0c;但是依然很多面试官还是会问一下&#xff0c;倘若这个问题就卡住了&#xff0c;通过的几率就大打折扣了。 下面一起来看一下吧&#xff01; 当一个线程在创…

高频面试题-请讲一下Java的反射机制!

这是我参与更文挑战的第8天&#xff0c;活动详情查看&#xff1a; 更文挑战 这个反射其实算是一道初级升中级的面试题&#xff0c;也是初级必须了解&#xff0c;中级必须了解并熟练使用的知识技能。 接下来就开始聊聊吧。 什么是反射&#xff1f; 反射就是在程序运行状态中&…

今天说一下Spring的架构模块!

这是我参与更文挑战的第9天&#xff0c;活动详情查看&#xff1a; 更文挑战 这是一个基础知识篇&#xff0c;看到这篇文章的&#xff0c;希望去多多理解一些更多的底层知识&#xff0c;不要不求甚解&#xff0c;要知其然知己所以然。 spring整体架构 大约分为20个模块,书上大概…