整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

05,JavaScript脚本中cookie

ookie:一般是被浏览器以数据库的形式存储在电脑硬盘中,供该浏览器进行读、写操作。


(1),添加cookie

	function addCookie()
	{
		// 添加cookie
		document.cookie= "username=xiobill; age=26";
	 
		debugger;
		// 给cookie设置终止时间
		var date = new Date();
		var expireDays=10;
		date.setTime(date.getTime() + expireDays*60*1000);
		document.cookie="username=xiobill; age=26; expires="+date.toUTCString();
	 
	}

(2),获取cookie

	// 获取cookie
	function getCookie(name) {
		debugger;
		var strCookie = document.cookie;
		var arrCookie = strCookie.split(";");
		for(var cookieIdx in arrCookie) {
			var cookieItm = arrCookie[cookieIdx];
			// 可啊
			var cookieKvalue = cookieItm.split("=");
			if(cookieKvalue[0] == name) {
				return cookieKvalue[1];
			}
		}
		return "";
		
	}

(3),修改cookie只需重新赋值 document.cookie="username=xblbill;",删除cookie,将cookie有效期设置为过去时间

页端抓数据免不了要跟JavaScript打交道,尤其是JS代码有混淆,对cookie做了手脚。找到cookie生成的地方要费一点时间。

那天碰到这样一个网页,用浏览器打开很正常。然而用requests下载URL却得到“521”的状态码,返回的内容是一串压缩混淆的JavaScript代码。就是下面这个样子:

返回的是JavaScript就好说了。肯定是浏览器运行这段JavaScript后,再次加载就可以得到真实网页内容了。

那么问题来了,这段js代码都做了些什么呢?

我们先观察一下浏览器的加载过程。因为你已经成功打开了这个网页,浏览器已经记住了某些关键的cookies,所以你要先把cookies删除。


如何删除Chrome浏览器记录的某个网站的cookies呢?


打开Chrome的settings,按这个路径寻找cookies删除的地方:Advanced -> Content Settings -> Cookies -> See all cookies and site data 。

然后在右上角的搜索栏搜索 就可以看到这个网站对应的cookies,把它们都删除即可。

打开浏览器的Network,选中“Preserve log”,记住加载的历史,然后用浏览器重新打开这个网址:

可以看到Network记录的加载过程:

观察发现,第一次返回了521,然后停顿片刻(实际上是1.5秒,后面js代码可以看到)再次加载该网页,可以得到正确的网页内容。


对比两次请求的cookies,可以发现第二次多了些cookies。这些cookies有可能就是521时返回的js写进去的。那么我们就来研究一下这段js代码。


首先,我们需要一个js格式化的工具来帮助我们研究这段js代码。工具很多,我们使用 https://beautifier.io/ 。把代码copy到beautifier的网页格式化一下:

先来理解一下这段代码,1-16行没什么特别的。16行要eval()一段js代码字符串,这个很关键,看看它是什么。把 eval 改成 console.log,然后按F12调出Chrome的开发者工具,把全部js代码copy到 Chrome的Console运行一下:


这时候,我们可以看到控制台输出了一段js的代码,把这段代码再copy到beautifier网页格式化一下:

第4行可以看到,是给 document.cookie 赋值了,也就是给浏览器写入的一个名为 __jsl_clearance 的cookie。这个cookie的生成跟第4行最后那个 function 有关,看代码的样子,又是一段加密算法。

我们可以读懂这个function的实现用Python实现算法,但实际上这段代码太难读懂了。我们可以借助Python的 ExecJS、PyV8这样的模块来运行这段js同样也可以得到cookie的值。

有了cookie的值,我们在Python里面使用requests.Session 就可以来加载这个网页了。在Python中得到那个cookies并正确加载网页内容,是对你Python能力的考验,如果遇到什么问题可以留言讨论讨论。

// 创建一个canvas元素
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');

// 设置canvas尺寸
canvas.width = 200;
canvas.height = 50;

// 绘制文本到canvas
ctx.textBaseline = "alphabetic";
ctx.fillStyle = "#f60";
ctx.fillRect(125, 1, 62, 20);
ctx.fillStyle = "#069";
ctx.font = "11pt no-real-font-123";
ctx.fillText("Cwm fjordbank glyphs vext quiz, \ud83d\ude03", 2, 15);

// 获取canvas的数据URL
var dataURL = canvas.toDataURL();

// 输出获取到的Canvas指纹信息
console.log('Canvas指纹信息: ' + dataURL);

览器的Canvas指纹技术是一种在线跟踪技术,它依赖于HTML5的Canvas API来创建一个独特的标识符,用于识别和跟踪用户。原理是这样的当你的浏览器访问一个网站时,网站可能会使用Canvas API来绘制一个隐藏的图形。这个图形的细节(例如,颜色、线条、阴影等)可能会受到你的浏览器、操作系统、硬件(特别是图形处理器)等因素的影响。因此,不同的用户或不同的设备生成的图形可能会有细微的差别。

网站可以读取这个图形的像素数据,将其转换为一个字符串(通常是一个哈希值),作为你的"Canvas指纹"。由于这个指纹是由你的设备和软件设置的细微差别生成的,因此它具有很高的唯一性,可以用来识别和跟踪你。并且这个哈希值和COOKIE存储在客户端一类的TOKEN还不一样,具有很高的唯一性,同一个品牌同一规格的主机也是会产生细微的区别的。大家可以动手试一试这一段代码。