【谷歌插件开发】获取当前网站COOKIE并上报HTTP-API

yizhihongxing

一 背景

由于本人每天需要登录网站查看数据并分析统计汇总,而每次机械式地搜索和简单计算,十分繁琐。我们可以写个定时任务,每天根据cookie获取网站数据并遍历统计。

脚本得以成功执行的关键是需要获取到COOKIE

故,写了个谷歌插件用来上报COOKIE

二 代码总目录

【谷歌插件开发】获取当前网站COOKIE并上报HTTP-API

三 上代码

  • manifest.json
    {
      "manifest_version": 3,
      "name": "Get Cookie",
      "description": "get cookie",
      "version": "1.0.0.1",
      "action": {
        "default_popup": "index.html",
        "default_icon": "images/icon.png"
      },
      "host_permissions": [
    	  "http://*/*",
    	  "https://*/*"
      ],
      "permissions": [
    	  "cookies",
    	  "tabs"
      ]
    
    }
  • index.html
    <html>
    	<head>
    		<meta http-equiv="content-type" content="text/html;charset=utf-8">
    		<link rel="stylesheet" type="text/css" href="mystyle.css">
    	</head>
    	<body>
    		<div id="container">
    			
    			
    			 <div class="sub">
    			    <div class="card">
    					<form action="#">
    						<textarea id="cookie" required readonly name="cookie" value="" placeholder="cookie"></textarea> <br>
    						<br>
    						<textarea id="hostnm" required readonly name="hostnm" value="" placeholder="host name"></textarea> <br>
    						<br>
    						<input id="username" type="text" required name="username" value="" class="username" style="height:30px;font-size: 15px;line-height:30px;" placeholder="请输入投放账户ID" autocomplete="on"> <br>
    						<br>
    						<input id="password" type="password" required name="password" value="" class="password"style="height:30px;font-size: 15px;line-height:30px;"placeholder="请输入密码"><br>
    						<br>
    						<label>环境:</label>
    						<input type="radio" name="env" value="2" checked /> 正式
    						<input type="radio" name="env" value="1" /> 测试
    						<br><br>
    						<input type="button" id="btn" style="background-color: #b3d4fc;width: 60%;height: 30px" value="验证上传">
    					</form>
    			    </div>
    			  </div> 
    		</div>
    		<script src="script.js"></script>
    	</body>
    </html>
  • mystyle.css
    #container {
      width: 250px;
      word-break: break-all;
    }
    .login{
      margin: 0 auto;
      position: relative;
      top: 100px;
      height: 500px;
      width: 400px;
      border-color: aqua;
    }
    .card{
      width: 75%;
      margin: auto;
    }
    

     

  • script.js
    const $container = document.getElementById('container')
    document.addEventListener('DOMContentLoaded', () => {
    	chrome.tabs.query({ 'active': true, 'windowId': chrome.windows.WINDOW_ID_CURRENT },
    		function (tabs) {
    			var url = new URL(tabs[0].url)
    			document.getElementById("hostnm").value = url.host
    			var hostarr = url.host.split('.')
    			hostarr.shift()
    			var curhost = hostarr.join(".");
    			console.log(curhost)
    			
    			chrome.cookies.getAll({
    				domain: curhost
    			}, (cookies) => {
    				console.dir(cookies);
    				cookies.map((c) => {
    					document.getElementById("cookie").value += c.name + "=" + c.value+"; "
    				})
    			})
    			
    			var btn=document.getElementById("btn");
    			btn.onclick=function () {
    				var username=document.getElementById("username").value;//获取用户名input的value
    				var password=document.getElementById("password").value;
    				var cookie=document.getElementById("cookie").value;
    				var hostnm=document.getElementById("hostnm").value;
    				var env = 2;
    				var obj = document.getElementsByName("env")
    				for (var i = 0; i < obj.length; i++) {
    					if (obj[i].checked) {
    						env = obj[i].value;                   
    					}
    				}
    				console.log("env: " + env)
    				console.log("username: " + username)
    				console.log("password: " + password)
    				console.log("cookie: " + cookie)
    				console.log("hostnm: " + hostnm)
    				if(username == undefined || username.trim() == ''){
    					alert("请输入 投放账户ID")
    					return false;
    				}
    				if(password == undefined || password.trim() == ''){
    					alert("请输入 密码")
    					return false;
    				}
    				if(cookie == undefined || cookie.trim() == ''){
    					alert("获取COOKIE失败")
    					return false;
    				}
    				if(hostnm == undefined || hostnm.trim() == ''){
    					alert("获取域名失败")
    					return false;
    				}
    				if(hostnm.trim().indexOf('你想抓去的页面域名') == -1){
    					alert("非需要抓取页面")
    					return false;
    				}
    				username = username.trim();
    				password = password.trim();
    				cookie = cookie.trim();
    				hostnm = hostnm.trim();
    				var data= {
    					'username':username,'password':password,'env':env,'cookie':cookie,'hostnm':hostnm
    				}
    				console.log(data)
    				var stringData=JSON.stringify(data);
    				var querydData = Object.keys(data).map(key => key + '=' + data[key]).join('&');
    				var ajax=null;
    				if(window.XMLHttpRequest) {
    					ajax=new XMLHttpRequest();
    				}else {
    					ajax=new ActiveXObject("Microsoft.XMLHTTP");
    				}
    				var posturl = "http://测试域名/api/upcookie";
    				if(env == 2){
    					posturl = "https://正式域名/api/upcookie"
    				}
    			    ajax.open("POST",posturl,true);
    				// ajax.open("GET",posturl+'?'+querydData,true);
    				ajax.onreadystatechange=function () {
    					if(ajax.readyState==4){
    						if(ajax.status==200){
    							var demo=ajax.responseText;
    							var demojson = JSON.parse(demo); 
    							if(demojson.success){
    								alert("上传成功")
    							}else{
    								alert(demojson.msg)
    							}
    						}else{
    							alert("服务器繁忙,请稍后重试")
    						}
    					};
    				}
    				ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    				ajax.send(querydData);
    			}
    		}
    	);
    })

四 效果演示

【谷歌插件开发】获取当前网站COOKIE并上报HTTP-API

 

【谷歌插件开发】获取当前网站COOKIE并上报HTTP-API

 

五 补充说明

  • 需要填写用户名密码的意义在于服务安全,防止拓展被乱用,我可以在api的后台随时配置随时删除。当然你使用jwt或更高级的更好。
  • cookie是有几级域名限制的,我们经常涉及到sso的场景,一般用类似于baidu.com来抓去baidu的cookie,而非fanyi.baidu.com。

原文链接:https://www.cnblogs.com/bushuwei/p/17353501.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【谷歌插件开发】获取当前网站COOKIE并上报HTTP-API - Python技术站

(0)
上一篇 2023年4月25日
下一篇 2023年4月25日

相关文章

  • HTML5 history新特性pushState、replaceState及两者的区别

    HTML5中引入的history API,包括pushState、replaceState方法的新特性,允许JavaScript程序修改浏览器的历史记录。在介绍这两个新特性的区别之前,我们先来了解一下它们的定义以及常见的使用场景。 pushState方法 pushState方法可以往浏览器历史记录里面插入一条新的记录,并在页面URL上添加指定的参数,而不需要…

    JavaScript 2023年6月11日
    00
  • 移动端js触摸事件详解

    移动端JS触摸事件是专门针对移动端开发的触摸操作API,它能够捕获触摸屏幕的动作,比如点击、滑动、拖动、缩放等,并能够根据开发者的需求进行多样化的响应操作。本文将详细讲解移动端JS触摸事件的使用方法和应用技巧,方便开发者在移动端开发中进行快速应用。 一、移动端JS触摸事件类型 移动端JS触摸事件类型主要包括:touchstart、touchmove、touc…

    JavaScript 2023年6月10日
    00
  • JavaScript中reduce()方法的使用详解

    JavaScript中reduce()方法的使用详解 1. 什么是reduce()方法 reduce()是JavaScript中的高阶函数,用于对数组中的所有元素进行迭代,并将它们缩减为单个值。它接受一个回调函数作为参数,该回调函数执行一个累加器和当前元素之间的操作,将最终结果返回。 reduce()方法的语法如下: arr.reduce(callback[…

    JavaScript 2023年5月27日
    00
  • js数组去重常见的方法汇总(7种)

    下面我将详细讲解“js数组去重常见的方法汇总(7种)”。 一、引言 在JavaScript的实际开发中,经常会遇到需要对数组进行去重操作的情况。而JavaScript提供了多种方法来进行数组去重操作,下面将详细介绍七种常见的方法。 二、使用Set Set是ES6新引入的一种集合数据类型,它可以存储任意类型的唯一值。使用Set可以很方便地实现数组去重,只需要将…

    JavaScript 2023年5月27日
    00
  • C#的WebBrowser的操作与注意事项介绍

    下面是关于“C#的WebBrowser的操作与注意事项介绍”的完整攻略。 1. WebBrowser的基本介绍 WebBrowser是C#中实现浏览器功能的核心控件,它支持访问Web站点、显示HTML和XML文档以及与服务器进行交互等操作。WebBrowser具有类似Internet Explorer(IE)的特性,在Windows中使用IE内核,因此对于I…

    JavaScript 2023年5月28日
    00
  • GoJs中导出图片或者SVG实现示例详解

    当我们需要在GoJs中快速导出图片或SVG文件时,可以使用GoJs的API来实现这一目标。下面我将详细讲解“GoJs中导出图片或者SVG实现示例详解”的完整攻略。 第一步:加载相关库文件 要使用GoJs的导出功能,首先需要在您的网站中引入GoJs和后端服务器使用的库文件。 <script src="https://unpkg.com/gojs…

    JavaScript 2023年6月11日
    00
  • JavaScript事件循环及宏任务微任务原理解析

    JavaScript事件循环及宏任务微任务原理解析 在学习 JavaScript 过程中,事件循环机制是必须要掌握的知识点之一。本文将详细介绍 JavaScript 事件循环机制的原理,以及宏任务和微任务的概念及异同点,其中包含两个示例说明。 事件循环机制的原理 JavaScript 是单线程执行的,意味着同一时间只能执行一段代码。然而在 Web 世界中,我…

    JavaScript 2023年6月11日
    00
  • JS中两个数组对象筛选方法

    下面是JS中两个数组对象筛选方法的完整攻略。 一、筛选方法介绍 在JS中,我们经常需要对数组对象进行筛选。常见的筛选方法有filter和find。 1. filter filter方法可以对数组对象进行筛选,并返回一个新的数组,新数组中包含符合条件的元素。 const arr = [1, 2, 3, 4, 5]; const newArr = arr.fil…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部