python爬虫反虫之setcookie
反爬表现
在使用python或rust进行爬虫的时候的有时会遇到请求返回一段含有只含有js代码的html页面如图:
分析及优化文件
首先解决转义字符x63x73x4b,转义字符可以通过console.log()打印出来,最方便方式是打开f12控制,将字符贴到console窗口中可以直接转义,下面附图是通过火狐的控制台打印的
可以看出x63x73就是cs
不过这样一个一个转换比较麻烦,可以到https://tool.lu/js去转换,不过这个工具对于有些代码转换的不够好,可以把源文件只格式后手动替换这些转义的代码,转换并替换后如下图
经分析js文件大体分为四部分
一、全局变量arg1与_0x4818
其中变量arg1是是用来解密的一个参数,这个参数每次加载文件返回的该值都不一样,变量_0x4818是一个初始解密参数数据,该参数经过(function(param, number) { } (arrayParam, 0x15b));初始化后会扩充调用 _0x4db1c函数来扩充_0x4818数组,用于后面的解密用相关代码如下
(function(param, number) { var _0x4db1c = function(_0x48181e) { while (--_0x48181e) { param['push'](param['shift']()); } console.log(param); }; 略。。。。。。。 } (arrayParam, 0x15b)); 123456789
二.初始化函数(function(param, number) { } (arrayParam, 0x15b));
var _0x4a2aed = function() { var _0x124d17 = new RegExp("w+ *() *{w+ *['|"].+['|"];? *}"); return _0x124d17['test'](_0xb8360b['removeCookie']['toString']()); }; _0xb8360b['updateCookie'] = _0x4a2aed; var _0x2d67ec = ''; var _0x120551 = _0xb8360b['updateCookie'](); if (!_0x120551) { _0xb8360b['setCooki2e'](['*'], 'counter', 0x1); } else if (_0x120551) { _0x2d67ec = _0xb8360b['getCookie'](null, 'counter'); } else { _0xb8360b['removeCookie'](); } 1234567891011121314
通过中函数 _0x4a2aed中的正则表达式可以看出是一个代码格式检查,就是用于防代码格式化,_0xb8360b[‘removeCookie’]'toString’就是对removeCookie函数直接格式化检查,如果进行了格式化那么_0x120551 值 为flase,这时程序会进入循环,至到浏览器崩溃,即然他只对removeCookie函数的格式进行了断判那么我们只需要把removeCookie函数放到一行即可即
'removeCookie': function(){return 'dev';}, 1
这样整个(function(param, number) { } (arrayParam, 0x15b));可以正常运行,通过dubug也可看到_0x4818数得到了扩充.接下来我看先分析reload()与setCooki2e()
三.reload()与setCooki2e()函数
function setCooki2e(name, value) { var expiredate = new Date(); expiredate.setTime(expiredate.getTime() + (3600 * 1000)); document.cookie = name + "=" + value + ";expires=" + expiredate.toGMTString() + ";max-age=3600;path=/"; } function reload(x) { setCooki2e("acw_sc__v2", x); document.location.reload(); } 12345678910
这段代码很好理解就是reload调用setCooki2e设置了一个key为acw_sc__v2值为x的cookie值,那么问题来了谁调用了reload()函数,全文搜索reload,仅在l函数据中查到reload附图
经分析arg2值主要是由arg1 _0x5e8b26 _0x23a392算出,其中变量_0x5e8b26内容如下var _0x5e8b26 = _0x55f3('0x3', 'jS1Y');也就是准确的说arg2是由 _0x55f3函数算出来的,而且数参数值已给出,即然这样我们直接写个函数调用l()函数就能得到arg2的值,也就是cookie acw_sc__v2的值。注:l()的第一句有个while函数,去掉即可while (window[_0x55f3('0x1', 'XMW^')] || window['__phantomas']) {};
四._0x55f3涵数
_0x55f3的返回值 主要与如下参数有关 ,只保存与这两参数相关的代码其他内容删掉即可
var _0x48181e = _0x4818[_0x4c97f0]; _0x55f3['rc4'] = _0x232678; 12
测试
在文件加了个input标签用来测试
拿生成的acw_sc__v2值设置到爬虫请求中可加载数据,如果要动态获取acw_sc__v2值,python可以用PyExecJS或selemium来获取,如果使用rust的话可以使用https://github.com/atroche/rust-headless-chrome
相关资料https://blog.csdn.net/fm345689/article/details/100559159
作者原文传送littleywww.littley.top相关知识
用Python爬虫获取网络园艺社区植物养护和种植技巧
基于Python爬虫的电商网站彩妆数据的分析与研究
爬虫技术在搜索引擎优化(SEO)中的应用与实践
(开题)flask框架《花间故里》(程序+论文+python)
Python的简单介绍(一)
用Python做兼职,轻松赚取零花钱,分享Python兼职经验
dawngo/基于python对红楼梦的人物分析
python毕设网上购物商城系统36x49.程序+论文
干货分享:Python数据分析工具
python 为女神编朵玫瑰花的代码
网址: python爬虫反虫之setcookie https://www.huajiangbk.com/newsview1109506.html
上一篇: spring boot使用内嵌的 |
下一篇: 以兰花为象征的花语(探秘兰花的意 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039