【JS_hook】爬虫调试技巧

发布于:2025-03-24 ⋅ 阅读:(37) ⋅ 点赞:(0)

hook,翻译是钩子,也称作js注入。

大概如图这样:

js代码的注入是在本地浏览器进行的,然后这一整个过程叫hook。 

hook的目的是在不修改原始代码的情况下,拦截或修改函数的执行行为。方便设断点调试。

简单理解:看看你咋加密的,我好解密。

爬虫常用有以下四种hook:

1. JSON.parse

案例:全国建筑市场

JSON.parse 是 JavaScript 中的一个内置方法,用于将一个 JSON 字符串转换为 JavaScript 对象

 为了在转换前断住,在F12控制台注入js代码:

(function(){
    var parse_ = JSON.parse; // Json.parse方法可替换成想断的方法,比如json.stringify
    JSON.parse = function(str){
        console.log("断住了嘿嘿!",str);
        debugger;
        return parse_(str);
    }}
)();

效果:

2.Cookie加密

 案例:同花顺

(function(){
    var cookieText = '';
    Object.defineProperty(document, 'cookie', {
        set: function(value) {
            if (value.indexOf('v') != - -1 ) {
                debugger;
            }
            console.log('Hook 捕获到了 cookie 值:' + value);
            cookieText = value;
        },
        get: function() {
            return cookieText;
        },
    });
})();

// 注意:此方法仅适用于简单的 cookie 值,对于复杂的 cookie 值,可能会造成不可预料的结果。

3. xhr参数加密

(function(){
    var open = XMLHttpRequest.prototype.open;
    window.XMLHttpRequest.prototype.open = function(method, url, async) {
        if (url.indexOf('[要断的参数]') !== -1) {
            debugger;
        }
        return open.apply(this, arguments);
    };
})();

像这种:

4.headers加密

(function() {
    var oldSetRequestHeader = window.XMLHttpRequest.prototype.setRequestHeader; 
    window.XMLHttpRequest.prototype.setRequestHeader = function(header, value) {
        if (key == 'headers 的参数 key') {
            debugger;
        }
        return oldSetRequestHeader.apply(this, arguments);
    };
})();
// 或者直接搜索:headers["enctype"]

像这种:


网站公告

今日签到

点亮在社区的每一天
去签到