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还不一样,具有很高的唯一性,同一个品牌同一规格的主机也是会产生细微的区别的。大家可以动手试一试这一段代码。
*请认真填写需求信息,我们会在24小时内与您取得联系。