Chrome之谷歌插件开发

Stella981
• 阅读 507

  最近碰到一个需求,需要在某个平台上批量的添加好友,如果是人工点击,可以操作,但是效率并不高,人工成本较高.就打算使用浏览器插件的方式来完成这件重复性的工作.

  介绍:

    Chrome插件的本质就是一个由 manifest.json 文件和插件所需要的图片,css,html,js资源组成的一个web页面,只是和传统的web页面不同的,它是以chrome浏览器为宿主运行的一个web程序。总的来说就是一个使用前端的技术就可以完成的内容

  使用:

    1. 首先,我们需要manifest.json文件来声明我要写的插件的相关信息。可以把manifest.json理解成插件的入口,即chrome需要通过manifest.json来理解你的插件要 引用哪些文件需要哪些权限插件图标等信息。

    文件可以参考官网  或者 其他   里面有详细的参数说明

{ 
    "name":"LY-helper",
    "version":"2.0", 
    "manifest_version":2, 
    "description":"**平台帮手,批量添加好友,统计好友数据", 
    "icons": {
        "128": "icon128.png"
    },
    "browser_action":{ 
      "default_icon":"icon128.png",
      "default_title":"ly-helper",
      "default_popup":"popup.html" 
    }, 
    "permissions":[ 
      "https://www.linkedin.com/" 
    ],
    "content_scripts":[
        {
          "matches":["https://www.linkedin.com/mynetwork/"],
          "js":["js/jquery-1.8.0.min.js","js/ly.js"]
        }
      ]
  }
  • name 属性定义了插件的名称
  • version 定义了插件的开发版本号
  • description 定义了插件的详细描述信息
  • app 对象定义了要打开的URL地址
  • iocns 对象定义了几种不同尺寸的图标的地址
  • requirements 对象定义了需要用到资源权限

 

    目录结构大致如下:

Chrome之谷歌插件开发

    设置logo和对应的点击页面: icon.png   popup.html

    popup.html示例:

<!doctype html>
<html>
<head>
<title>Getting Started Extension's Popup</title>
<style>
body{min-width:357px;overflow-x:hidden}img{margin:5px;border:2px solid #000;vertical-align:middle;width:75px;height:75px}
</style>
<script src="js/jquery-1.8.0.min.js"></script>
<script src="js/ly.js"></script>
</head>
<body>
</body>
</html>

  可以在使用的时候,进行代码压缩处理

  js目录中存放相关的js代码

    2.插件使用

      打开浏览器输入地址: chrome://chrome/extensions

      开启开发者模式:

Chrome之谷歌插件开发

      点击:"加载已解压的扩展程序" 将开发的文件目录加载进来

Chrome之谷歌插件开发

    打开相应的网站即可实现效果

    另外可以不自己进行插件开发,直接使用油猴进行脚本的开发工作:

      1. 下载油猴浏览器插件

      2. 安装

Chrome之谷歌插件开发

       3. 新建一个脚本即可急速开发

// ==UserScript==
// @name         in-friends-add
// @namespace    http://dajiala.com
// @version      0.1
// @description  领英平台自动添加好友
// @author       X-Wolf
// @match        https://www.linkedin.com/*
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function() {
    'use strict';
    var api = '';
    var keywords = ['ceo','投资经理']; //关键词库
    //时间段限制
    var myD = new Date();
    var hour = myD.getHours();
    if(hour>0 && hour < 7){
        sleep(60*30*1000); //休息30分钟
        location.href = 'https://www.linkedin.com/mynetwork/';
    }

    var path = window.location.pathname;
    // 领英好友添加(1.关键词 2.推荐 3.好友圈)
    if(path == '/mynetwork/'){ //推荐
        var timer = setInterval(function(){
            document.documentElement.scrollTop = document.documentElement.scrollTop+100;
            addFriends();
        },4000);


    } else if(path == '/search/results/people/'){ //关键词
        //添加关键词好友
        var timer2 = setInterval(function(){
            document.documentElement.scrollTop = document.documentElement.scrollTop+50;
            addKeywordFriends();
        },10000);
    } else if(path == '/mynetwork/invite-connect/connections/'){ //好友列表

        var friend = $('.mn-connections__header').find('h1').text();
        console.log('统计:'+friend);
        GM_xmlhttpRequest({
            method: "POST",
            url: api+"/other/addInFriendStat?friend="+friend,
            dataType: "json",
            headers: {
                "Content-Type": "application/json"
            },
            onload: function(ret){
                result = $.parseJSON(ret.responseText);
                console.log(result);
            }
        });
        sleep(1000*10);
        //跳转到首页
        location.href = 'https://www.linkedin.com/mynetwork/';
    }

    //添加好友
    function addFriends(){
        $('.discover-entity-card').each(function(index){
            console.log(index);
            if(index ==  2){
                var name = $(this).find('.discover-person-card__name').text();
                console.log('添加好友'+name);

                //发送好友请求
                var occupation = $(this).find('.discover-person-card__occupation').text();
                var link = $(this).find('.discover-person-card__image-link').attr('href');
                var source = 2;
                var that = $(this);
                GM_xmlhttpRequest({
                    method: "POST",
                    url: api+"/other/inFriendApply?name="+name+'&occupation='+occupation+'&link='+link+'&source='+source,
                    dataType: "json",
                    headers: {
                        "Content-Type": "application/json"
                    },
                    onload: function(ret){
                        var result = $.parseJSON(ret.responseText);
                        //添加成功,计算已经添加的数量
                        console.log('好友添加结果:'+result.msg);
                        console.log('是否达到上限:'+result.data.limit);
                        if(result.data.limit){ //达到上限,跳转搜索页面
                            var keyword = getKeyword();
                            console.log('随机关键词:'+keyword);
                            location.href = 'https://www.linkedin.com/search/results/people/?keywords='+keyword+'&origin=CLUSTER_EXPANSION';
                        }else{
                            console.log('添加好友操作');
                            that.find('.mt2').find('button').trigger('click');
                        }
                    }
                });
                sleep(300);
            }

        });
    }

    function addKeywordFriends(){
        var page = getUrlParam('page');
        var keyword = getUrlParam('keywords');
        //获取关键词数据
        $('.search-results__list').find('li').each(function(index){
            var name = $(this).find('.actor-name').text();
            var link = $(this).find('.search-result__result-link').attr('href');
            var occupation = $(this).find('.search-result__info').find('p').eq(0).find('span').text();
            var rank = $(this).find('.dist-value').text();
            console.log('名称:'+name+' 链接:'+link+' 职业:'+occupation+'级别:'+rank);
            var source = 1; //关键词搜索
            var that = $(this);
            var operation = $.trim($(this).find('button').text());
            console.log('操作:'+operation);
            if(name && operation == '加为好友'){
                console.log('需要添加的好友:'+name);
                GM_xmlhttpRequest({
                    method: "POST",
                    url: api+"/other/inFriendApply?name="+name+'&occupation='+occupation+'&link='+link+'&source='+source+'&keyword='+keyword,
                    dataType: "json",
                    headers: {
                        "Content-Type": "application/json"
                    },
                    onload: function(ret){
                        var result = $.parseJSON(ret.responseText);
                        console.log('添加申请:'+result.msg+' 上限:'+result.data.limit);
                        //添加成功,计算已经添加的数量
                        if(result.data.limit){
                            location.href = 'https://www.linkedin.com/mynetwork/invite-connect/connections/';
                        }else{
                            //触发添加好友操作
                            that.find('.search-result__actions').find('button').trigger('click');
                            sleep(2000);
                            $('.send-invite__actions').find('button').eq(1).trigger('click');
                            //location.href = location.href;
                            location.href = 'https://www.linkedin.com/mynetwork/';
                        }

                    }
                });
            }
            //sleep(5000);
        });

        sleep(2000);
        //分页跳转
        var pageNum = typeof(page) == 'undefined' ? 1 : page;
        console.log(pageNum);
        location.href = 'https://www.linkedin.com/search/results/people/?keywords='+keyword+'&origin=CLUSTER_EXPANSION&page='+(parseInt(pageNum)+1);
    }

    //休眠时间
    function sleep(numberMillis){
        var now = new Date();
        var exitTime = now.getTime() + numberMillis;
        while (true) {
            now = new Date();
            if (now.getTime() > exitTime)
                return;
        }
    }
    //获取分页参数
    function getUrlParam(name)
    {
        var url = document.location.toString();
        var urlArr = url.split('?');
        if(urlArr.length > 1){
            var arr;
            var params = urlArr[1].split('&');

            for(var i=0; i< params.length; i++){
                arr = params[i].split('=');
                if(arr != null && arr[0] == name){
                    return arr[1];
                }
            }
        }else{
            return 1;
        }
    }
    //获取关键词
    function getKeyword(){
        var index = Math.floor((Math.random()*keywords.length));
        console.log('索引值:'+index);
        return keywords[index];
    }

    console.log('当前访问路径:'+path);

})();
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Django之Django模板
1、问:html页面从数据库中读出DateTimeField字段时,显示的时间格式和数据库中存放的格式不一致,比如数据库字段内容为2012082616:00:00,但是页面显示的却是Aug.26,2012,4p.m.答:为了页面和数据库中显示一致,需要在页面格式化时间,需要添加<td{{dayrecord.p\_time|date:
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
Eclipse插件开发_学习_00_资源帖
一、官方资料 1.eclipseapi(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fhelp.eclipse.org%2Fmars%2Findex.jsp%3Ftopic%3D%252Forg.eclipse.platform.doc.isv%252Fguide%2
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这