注:本篇博客仅供学习使用,请勿用做其他商业用途,如有侵权,请联系本菜鸟删除
写在前面:本小菜鸟已经有一年多时间没更新博客了,在这段时间中一直处于摆烂状态,而且在这段时间中各种大佬都出了直接的js补环境框架,环境框架那种一力破万法的方式很强,我很羡慕,但是我是菜鸟没得那么强的js功底,扣逻辑起码得把博主痔疮坐出来(直接劝退),所以今天发一点纯补js过瑞数vmp的文章以供大家学习参考
现在是人均瑞数时代,只要涉及gov网站的或多或少都会和瑞数打打交道,不少爬虫新手被这个玩意儿打击的不轻,今天我们也来一个类似的网站
学习目标网址:
aHR0cDovL2NyZWRpdC5jdXN0b21zLmdvdi5jbi9jY3Bwd2Vic2VydmVyL3BhZ2VzL2NjcHAvaHRtbC9jY3BwaW5kZXguaHRtbA==
一、瑞数vmp特征
1.第一次请求网页状态返回状态为412或者202,那么基本可以确定这是瑞数反爬了
2.响应码中如下:
以及请求200携带的本地cookie没有数字开头
,从上面几个方面可以基本确定是瑞数vmp版本
二、准备工作
1.将412页面返回给我们的meta_content和js代码以及外链js代码扣取下来放入一个js代码中
三、补环境
1.补第一层的js环境
运行一次上面的js代码
后面会依次出现document,location,我们还是本着缺啥补啥的原则一一补上
window = globalThis;
document = {}
location = {
"ancestorOrigins": {},
"href": "http://xxxx/index.html",
"origin": "http://xxx.xx.cn",
"protocol": "http:",
"host": "xxx.xx.cn",
"hostname": "xxx.xx.cn",
"port": "",
"pathname": "xxx/index.html",
"search": "",
"hash": ""
};
navigator = {
userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36",
languages: ["zh-CN", "zh"],
}
}
这里我们已经补完location
,但是依旧提示我们location undefined ???
这特么谁受的了,这我能忍??直接给我整红温了
直接加上我的proxy代理器
然后直接提醒我window.top ---> undefined
好嘛,我们直接把这个给补上
window.top = window;
后面直接给我出现_$dE[_$m_[43]] is not a function
这表示第一层js代码以及补完,下面我们正式进入第二层call
2.补第二层js环境
还是把window的代理加上
提示我们localStorage没有,所以我们把localStorage补上
由上图可知,实例对象localStorage上是没得任何方法的,所以我们要补localStorage原型
上的方法
后面还有window.document.createElement
需要我们补
好了window的先就讲这么多,其他的由同学们自己去补齐
后面的我们依次将document、navigator、location
等加上代理
document检测了createElement等
此外代码中还有定时器,触发定时器node代码会一直跑
所以我们要把这个定时器处理掉
window.setInterval = function (){}
document.appendChild = function (){}
document.removeChild = function (){}
而且还检测了事件监听
太多了。。。,算了算了,不写了,选择躺平
最后成功拿到cookie成功请求到200页面
少更新文章是希望各位爬虫伙伴不要那么卷,希望大家理解!拜拜,下班躺平