chrome浏览器插件开发

每次双十一秒杀,都秒杀不到,点击进去就发现已经被抢光了,点击的速度太慢了,所以就想,有没有能够让浏览器自动快速点击的程序,当然,淘宝有防止这种作弊的方式,我只是心血来潮,想试试,如何使网站使用自己编写的脚本,达到自己想要的结果。

控制台编写

写网页的过程中绝对少不了调试,控制台的功能很强大,一般来说,使用chrome的会比较多,chrome开发者文档,讲解的听详细的,可以看看学习。 现在来说如何通过控制台来编写程序从而做到控制网页的: 按F12键调出控制台,选择Source,如图: 在Snippets上点击右键,会出现一个new选项,点击新建一个Script snippet,然后在右边的编辑区域中写上控制的script语句,保存后,点击右边控制区域的开始建,或者在Script snippet文件上方点击右键,选择Run. 举个栗子:我们想控制页面上某个按钮的点击并触发改按钮的点击事件。 页面代码:

<a href="http:ww.baidu.com">baidu</a>
 <h1>自动嵌入脚本</h1>
         <input type="button"  value="自动点击" id="but1" onclick="show()"/>
		 <div id="div1" style="width:100px;height:50px;border:1px solid black;"></div>
		  <script type="text/javascript">
           function show(){
		             var colors=['#FFE4E1','	#90EE90','#00BFFF','#FFFF00','#008B8B'];
                        var co= Math.floor(Math.random() * colors.length + 1)-1;
                        $('#div1').css('background-color',colors[co]);
		   }
     </script>

我们需要控制id为but1的按钮自动点击来让div框的背景颜色变化,我们可以在Script snippet文件里写上如下代码:

var btn = document.getElementById("but1");
/* //自定义的绑定的onclick方法
btn.onclick=function(){
  var today = new Date();
  console.log(btn.value + "点击时间是: " + today.toString());
};
*/

function myInterval() {  
         btn.click();          
         }
        setInterval("myInterval()", 1000); //1000为1秒钟执行一次

这里需要注意,可能只是我个人的能力原因,Script snippet文件里面只运行js代码,对于jquery代码,如果控制的网页有引用jquery.js,那么Script snippet文件可以运行jquery代码,如果控制的网页没有引用jquery.js,那么Script snippet文件运行不了jquery代码,我试过通过创建属性的方法将jquery引用,但是,还是不行。

new_element=document.createElement("script"); 
new_element.setAttribute("type","text/javascript"); 
new_element.setAttribute("src"," http://apps.bdimg.com/libs/jquery/2.1.1/jquery.js"); 
document.body.appendChild(new_element); 

还有一点需要注意,如果绑定自动执行的按钮有onclick事件,那么,最好不要再控制台里再绑定自定义的onclick事件,这样,原来的按钮自身的事件不会被执行。一般来说,onclick是可以绑定多个事件的,并且都可以执行,但是这里为啥不能被执行,有点想不通。

chrome devtools插件开发

相信作为前端人员,对浏览器的插件并不陌生,上面的控制台的页面控制有局限性,所以我又尝试了浏览器的插件开发,更专业,更强大。 下面针对的是chrome浏览器的开发,因为我常用的浏览器就是chrome,而且Firefox插件只能运行在Firefox上,而Chrome除了Chrome浏览器之外,还可以运行在所有webkit内核的国产浏览器,比如360极速浏览器、360安全浏览器、搜狗浏览器、QQ浏览器等等。除此之外,Firefox浏览器也对Chrome插件的运行提供了一定的支持。 接下来我们来了解插件的结构目录

插件核心

chrome浏览器插件的核心是mainfest.json文件,我们需要在这里进行配置。

{
    // 清单文件的版本,这个必须写,而且必须是2
    "manifest_version": 2,
    // 插件的名称
    "name": "test",
    // 插件的版本
    "version": "1.0",
    // 插件描述
    "description": "This is my first extension,just for testing!",
    // 图标
    "icons":
    {
       "16": "images/16.png",
       "48": "images/48.png",
       "128": "images/128.png"
    },
    // 会一直常驻的后台JS或后台页面
    "background":
    {
        // 2种指定方式,如果指定JS,那么会自动生成一个背景页
        //"page": "background.html"
        "scripts": ["js/background.js"],
         "persistent": true
    },
    // 浏览器右上角图标设置,browser_action、page_action、app必须三选一
    "browser_action": 
    {
       "default_icon":{
    "16": "images/16.png",
    "48": "images/48.png",
    "128": "images/128.png"
      },
	"default_title":"Hello",
	"default_popup":"popup.html"
    },
    // 当某些特定页面打开才显示的图标
    /*"page_action":
    {
           "default_icon":{
           "16": "images/16.png",
           "48": "images/48.png",
           "128": "images/128.png"
      },
	"default_title":"Hello",
	"default_popup":"popup.html"
    },*/
    // 需要直接注入页面的JS
    "content_scripts": 
    [
        {
            //"matches": ["http://*/*", "https://*/*"],
            // "<all_urls>" 表示匹配所有地址
            "matches": ["<all_urls>"],
            // 多个JS按顺序注入
           "js":["juery.js","hook.js"],
            // 这里的css是全局css样式,相当于浏览器默认的样式
            "css": ["css/custom.css"],
            // 代码注入的时间,可选值: "document_start", "document_end", or "document_idle",最后一个表示页面空闲时,默认document_idle
            "run_at": "document_start"
        },
        // 这里仅仅是为了演示content-script可以配置多个规则
        {
            "matches": ["*://*/*.png", "*://*/*.jpg", "*://*/*.gif", "*://*/*.bmp"],
            "js": ["inject.js"]
        }
    ],
    // 权限申请
    "permissions":
    [
        "contextMenus", // 右键菜单
        "tabs", // 标签
        "notifications", // 通知
        "webRequest", // web请求
        "webRequestBlocking",
        "storage", // 插件本地存储
        "http://*/*", // 可以通过executeScript或者insertCSS访问的网站
        "https://*/*" // 可以通过executeScript或者insertCSS访问的网站
    ],
    //安全机制
    "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
    // 普通页面能够直接访问的插件资源列表,如果不设置是无法直接访问的
   "web_accessible_resources": ["mypanel.html", "devtools.html"],
    // 插件主页
    "homepage_url": "https://luciferlia.github.io./",
    // 覆盖浏览器默认页面
    "chrome_url_overrides":
    {
        // 覆盖浏览器默认的新标签页
        "newtab": "newtab.html"
    },
    // Chrome40以前的插件配置页写法
    "options_page": "options.html",
    // Chrome40以后的插件配置页写法,如果2个都写,新版Chrome只认后面这一个
    "options_ui":
    {
        "page": "options.html",
        // 添加一些默认的样式,推荐使用
        "chrome_style": true
    },
    // 向地址栏注册一个关键字以提供搜索建议,只能设置一个关键字
    "omnibox": { "keyword" : "go" },
    // devtools页面入口,注意只能指向一个HTML文件,不能是JS文件
    "devtools_page": "devtools.html"
}
content-scripts

在配置项中,content-scripts是非常重要的一项,content-scripts,其实就是Chrome插件中向页面注入脚本的一种形式,和原始页面共享DOM,但是不共享JS,如要访问页面JS(例如某个JS变量),只能通过injected js来实现。

关于每个配置项的信息解说,可以参考,讲解的很详细。

接下来就是把插件安装在浏览器上了,可以点击浏览器的设置进入扩展程序,将你的插件文件夹直接拖入,就可以安装成功了,安装后,每个插件下面会有一个ID,你可以在电脑中根据ID找到你的安装目录,比如我的安装的一个插件的路径就是C:\Users\liaoqian\AppData\Local\Google\Chrome\User Data\Default\Extensions\fhbjgbiflinjbdggehcddcbncdddomop