一、前言
都说瑞数很难,于是自己尝试一下通过补环境的方式来取到内容,记录一下过程。
二、瑞数介绍
瑞数有不同的版本,这次尝试的是瑞数的4代版本
瑞数4主要流程:第一次访问页面(返回202和cookie_S)->获取js,解密生成cookie_T->第二次带上cookie访问页面(返回200和内容)
三、过程
1、cookie生成过程
hook cookie生成位置
(function () {
'use strict';
var _cookie = "";
Object.defineProperty(document, 'cookie', {
set: function (value) {
console.warn('cookies set->',new Date().getTime(), value);
debugger;
_cookie = value;
return value;
},
get: function () {
return _cookie;
}
})
})()
第一次页面代码
外部js代码
解密的VM代码
把conten、外部js代码、页面内自执行代码、VM代码都复制粘贴到一个文件里面(注意顺序)
2、补环境
在代码最前面稍微加上点代码,看看代码在浏览器中是否能正确生成cookie
document.getElementsByTagName = function() {
return [{
content: meta_content, // 这里用的是页面中content
parentNode: {
removeChild: function() {}
},
parentElement: {
removeChild: function() {}
}
}]
}
Object.prototype.getAttribute = function (val){if(val==='r'){return 'm'}}
可以看到在浏览器中可以正常生成cookie,接下来直接拿到本地,根据报错来补环境就ok了
先简单补一下环境,大部分环境直接在浏览器控制使用copy()
来复制就好了
;Window = function () {}
window = global;
window.__proto__ = Window.prototype;
document = {
characterSet: 'UTF-8',
charset: 'UTF-8',
scripts: ['script', 'script'],
documentElement: {
style: {}
},
cookie: '',
};
div = {
getElementsByTagName: function (val) {
if (val === 'i') {
return {
length: 0
}
}
}
};
document.createElement = function (val) {
if (val === 'div') {
return div
}
if (val === 'form') {
return {}
}
if (val === 'a') {
return {}
}
};
location = {
"ancestorOrigins": {},
"href": "http://www.fangdi.com.cn/new_house/new_house_detail.html",
"origin": "http://www.fangdi.com.cn",
"protocol": "http:",
"host": "www.fangdi.com.cn",
"hostname": "www.fangdi.com.cn",
"port": "",
"pathname": "/new_house/new_house_detail.html",
"search": "",
"hash": ""
};
环境太多了就不一一贴出来了
3、运行
使用python execjs来调用生成cookie,再请求页面看看是否能拿到正确的页面数据
可以看到已经能正常拿到页面数据了
标签:function,初体验,return,val,瑞数,--,cookie,页面 From: https://www.cnblogs.com/pigke/p/17659947.html