热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Chrome之谷歌插件开发

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

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

  介绍:

    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 对象定义了需要用到资源权限 

 

    目录结构大致如下:

 

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

    popup.html示例:

  











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

  

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

 

    2.插件使用

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

      开启开发者模式:

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

 

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

 

 

 

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

      1. 下载油猴浏览器插件

      2. 安装

 

       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() {
&#39;use strict&#39;;var api &#61; &#39;&#39;;var keywords &#61; [&#39;ceo&#39;,&#39;投资经理&#39;]; //关键词库//时间段限制var myD &#61; new Date();var hour &#61; myD.getHours();if(hour>0 && hour <7){sleep(60*30*1000); //休息30分钟location.href &#61; &#39;https://www.linkedin.com/mynetwork/&#39;;}var path &#61; window.location.pathname;// 领英好友添加(1.关键词 2.推荐 3.好友圈)if(path &#61;&#61; &#39;/mynetwork/&#39;){ //推荐var timer &#61; setInterval(function(){document.documentElement.scrollTop &#61; document.documentElement.scrollTop&#43;100;addFriends();},4000);} else if(path &#61;&#61; &#39;/search/results/people/&#39;){ //关键词//添加关键词好友var timer2 &#61; setInterval(function(){document.documentElement.scrollTop &#61; document.documentElement.scrollTop&#43;50;addKeywordFriends();},10000);} else if(path &#61;&#61; &#39;/mynetwork/invite-connect/connections/&#39;){ //好友列表var friend &#61; $(&#39;.mn-connections__header&#39;).find(&#39;h1&#39;).text();console.log(&#39;统计:&#39;&#43;friend);GM_xmlhttpRequest({method: "POST",url: api&#43;"/other/addInFriendStat?friend&#61;"&#43;friend,dataType: "json",headers: {"Content-Type": "application/json"},onload: function(ret){result &#61; $.parseJSON(ret.responseText);console.log(result);}});sleep(1000*10);//跳转到首页location.href &#61; &#39;https://www.linkedin.com/mynetwork/&#39;;}//添加好友
function addFriends(){$(&#39;.discover-entity-card&#39;).each(function(index){console.log(index);if(index &#61;&#61; 2){var name &#61; $(this).find(&#39;.discover-person-card__name&#39;).text();console.log(&#39;添加好友&#39;&#43;name);//发送好友请求var occupation &#61; $(this).find(&#39;.discover-person-card__occupation&#39;).text();var link &#61; $(this).find(&#39;.discover-person-card__image-link&#39;).attr(&#39;href&#39;);var source &#61; 2;var that &#61; $(this);GM_xmlhttpRequest({method: "POST",url: api&#43;"/other/inFriendApply?name&#61;"&#43;name&#43;&#39;&occupation&#61;&#39;&#43;occupation&#43;&#39;&link&#61;&#39;&#43;link&#43;&#39;&source&#61;&#39;&#43;source,dataType: "json",headers: {"Content-Type": "application/json"},onload: function(ret){var result &#61; $.parseJSON(ret.responseText);//添加成功,计算已经添加的数量console.log(&#39;好友添加结果:&#39;&#43;result.msg);console.log(&#39;是否达到上限:&#39;&#43;result.data.limit);if(result.data.limit){ //达到上限,跳转搜索页面var keyword &#61; getKeyword();console.log(&#39;随机关键词:&#39;&#43;keyword);location.href &#61; &#39;https://www.linkedin.com/search/results/people/?keywords&#61;&#39;&#43;keyword&#43;&#39;&origin&#61;CLUSTER_EXPANSION&#39;;}else{console.log(&#39;添加好友操作&#39;);that.find(&#39;.mt2&#39;).find(&#39;button&#39;).trigger(&#39;click&#39;);}}});sleep(300);}});}function addKeywordFriends(){var page &#61; getUrlParam(&#39;page&#39;);var keyword &#61; getUrlParam(&#39;keywords&#39;);//获取关键词数据$(&#39;.search-results__list&#39;).find(&#39;li&#39;).each(function(index){var name &#61; $(this).find(&#39;.actor-name&#39;).text();var link &#61; $(this).find(&#39;.search-result__result-link&#39;).attr(&#39;href&#39;);var occupation &#61; $(this).find(&#39;.search-result__info&#39;).find(&#39;p&#39;).eq(0).find(&#39;span&#39;).text();var rank &#61; $(this).find(&#39;.dist-value&#39;).text();console.log(&#39;名称:&#39;&#43;name&#43;&#39; 链接:&#39;&#43;link&#43;&#39; 职业:&#39;&#43;occupation&#43;&#39;级别:&#39;&#43;rank);var source &#61; 1; //关键词搜索var that &#61; $(this);var operation &#61; $.trim($(this).find(&#39;button&#39;).text());console.log(&#39;操作:&#39;&#43;operation);if(name && operation &#61;&#61; &#39;加为好友&#39;){console.log(&#39;需要添加的好友:&#39;&#43;name);GM_xmlhttpRequest({method: "POST",url: api&#43;"/other/inFriendApply?name&#61;"&#43;name&#43;&#39;&occupation&#61;&#39;&#43;occupation&#43;&#39;&link&#61;&#39;&#43;link&#43;&#39;&source&#61;&#39;&#43;source&#43;&#39;&keyword&#61;&#39;&#43;keyword,dataType: "json",headers: {"Content-Type": "application/json"},onload: function(ret){var result &#61; $.parseJSON(ret.responseText);console.log(&#39;添加申请:&#39;&#43;result.msg&#43;&#39; 上限:&#39;&#43;result.data.limit);//添加成功,计算已经添加的数量if(result.data.limit){location.href &#61; &#39;https://www.linkedin.com/mynetwork/invite-connect/connections/&#39;;}else{//触发添加好友操作that.find(&#39;.search-result__actions&#39;).find(&#39;button&#39;).trigger(&#39;click&#39;);sleep(2000);$(&#39;.send-invite__actions&#39;).find(&#39;button&#39;).eq(1).trigger(&#39;click&#39;);//location.href &#61; location.href;location.href &#61; &#39;https://www.linkedin.com/mynetwork/&#39;;}}});}//sleep(5000);
});sleep(2000);//分页跳转var pageNum &#61; typeof(page) &#61;&#61; &#39;undefined&#39; ? 1 : page;console.log(pageNum);location.href &#61; &#39;https://www.linkedin.com/search/results/people/?keywords&#61;&#39;&#43;keyword&#43;&#39;&origin&#61;CLUSTER_EXPANSION&page&#61;&#39;&#43;(parseInt(pageNum)&#43;1);}//休眠时间
function sleep(numberMillis){var now &#61; new Date();var exitTime &#61; now.getTime() &#43; numberMillis;while (true) {now &#61; new Date();if (now.getTime() > exitTime)return;}}//获取分页参数
function getUrlParam(name){var url &#61; document.location.toString();var urlArr &#61; url.split(&#39;?&#39;);if(urlArr.length > 1){var arr;var params &#61; urlArr[1].split(&#39;&&#39;);for(var i&#61;0; i<params.length; i&#43;&#43;){arr &#61; params[i].split(&#39;&#61;&#39;);if(arr !&#61; null && arr[0] &#61;&#61; name){return arr[1];}}}else{return 1;}}//获取关键词
function getKeyword(){var index &#61; Math.floor((Math.random()*keywords.length));console.log(&#39;索引值:&#39;&#43;index);return keywords[index];}console.log(&#39;当前访问路径:&#39;&#43;path);})();

 

 

  

转:https://www.cnblogs.com/xingxia/p/chrome_plugins.html



推荐阅读
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
author-avatar
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有