浏览器反爬-打不开开发工具
前言
身在深渊中,何须怕深渊
有些网站为防止爬虫,打开页面后再打开开发者工具导致页面跳转或者打不开页面
⚠️声明:本文所涉及的爬虫技术及代码仅用于学习、交流与技术研究目的,禁止用于任何商业用途或违反相关法律法规的行为。若因不当使用造成法律责任,概与作者无关。请尊重目标网站的
robots.txt协议及相关服务条款,共同维护良好的网络环境。
1.防抽
网页地址:https://landchina.com/#/givingNotice
代码核心检测方式
| 检测方式 | 适用浏览器 | 可靠性 | 触发方式 | 
|---|---|---|---|
console.profile() | 
早期 Chrome、Opera | 已失效 | 通过 console.profiles.length 判断 | 
console.firebug | 
早期 Firefox | 已失效 | Firebug 标志检测 | 
console.table().match(/firebug/i) | 
早期 Firefox | 已失效 | Firebug 兼容检测 | 
window.outerHeight - window.innerHeight > 200 | 
Chrome、Firefox | 可靠 | 通过窗口大小变化检测 | 
setInterval(ck, 2000) | 
所有浏览器 | 可靠 | 定时检查 DevTools | 
代码作用
- 主要用于检测开发者工具(F12)是否打开,防止用户查看网页源码或爬取数据。
 - 一旦检测到 DevTools 打开,会执行 
fanchou()清空页面并跳转到about:blank。 
关键检测方式
console.profile()检测(已失效)- 早期 Chrome 允许 
console.profile()在 DevTools 打开时启用,但现在已被屏蔽。 
- 早期 Chrome 允许 
 - 检测 Firebug(旧版 Firefox)
- 通过 
console.firebug和console.table()关键字检测 Firebug,但该工具已停止维护。 
 - 通过 
 - 窗口大小变化检测(有效)
window.outerHeight - window.innerHeight > 200- 如果窗口高度变化超过 200px,说明 DevTools 可能被打开,触发 
fanchou()清空页面。 
 - 定时 
setInterval()检测- 每 2 秒 运行 
ck()进行检测,若发现异常则清空页面。 
 - 每 2 秒 运行 
 
地址:
这段 JavaScript 代码的主要目的是检测用户是否打开了开发者工具(F12),如果检测到用户打开了开发者工具,就会触发 fanchou(),执行防抽操作(清空页面内容并跳转到 about:blank )。
(function() {
    function fanchou() {
        // 现代浏览器(如 Chrome、Edge、Firefox)默认会禁止 window.close() 关闭非 window.open() 打开的页面,所以 window.close() 在某些情况下不会生效。
        window.close();
        document.body.innerHTML = ''; // 清空页面内容
        window.location.href = 'about:blank'; // 跳转到空白页
    }
    function ck() {
        console.profile(); // 开启性能分析
        console.profileEnd(); // 结束性能分析
        if (console.clear) {
            console.clear(); // 清空控制台
        }
        if (typeof console.profiles === 'object') {
            return console.profiles.length > 0;
        }
    }
    function hehe() {
        // 1. 检测 Firebug(旧版 Firefox 扩展)
        if (
            (window.console && (console.firebug || console.table && /firebug/i.test(console.table()))) ||
            (typeof opera === 'object' && typeof opera.postError === 'function' && console.profile.length > 0)
        ) {
            fanchou();
        }
        // 2. 检测 console.profiles(旧版 Chrome)
        if (typeof console.profiles === "object" && console.profiles.length > 0) {
            fanchou();
        }
    }
    hehe();
    // 3. 监测窗口大小变化
    window.onresize = function() {
        if ((window.outerHeight - window.innerHeight) > 200) { // 判断窗口变化是否大于 200px
            fanchou();
        }
    };
    // 4. 定时检测 console 变化
    setInterval(function() {
        if (ck()) {
            fanchou();
        }
    }, 2000);
})();
2.window.close()
- 
window.close()只能关闭window.open()打开的窗口,用户手动打开的窗口无法关闭。 - 
window.opener = null;将opener设为null,防止窗口与父页面通信,避免浏览器拦截window.close()。 - 
可以用
window.open("", "_self").close();绕过浏览器限制。 - 
如果
window.close()无效,可以用window.history.back()或window.location.href = "about:blank"替代。 - 
在按钮
onclick事件中使用window.close(),某些浏览器可能允许执行。 
3.事件监听器断点中的 script 选项
事件监听器断点(Event Listener Breakpoints)是 Chrome 开发者工具(DevTools)提供的一种 调试功能,可以在特定的 DOM 事件触发时自动暂停 JavaScript 执行,帮助开发者分析代码逻辑、找出错误或者逆向分析页面行为。
script 选项下包含两个具体的断点类型:
- 
Script First Statement(脚本首语句)- 
作用:当 JavaScript 代码开始执行时,自动触发断点。
 - 
用途:
- 拦截网页执行的所有 JavaScript 代码。
 - 调试内嵌 JavaScript 或 动态加载的 JavaScript(如 
eval())。 - 用于分析网站的核心 JS 逻辑,包括反爬虫、反调试、加密逻辑等。
 
 
 - 
 - 
Script Parsed(脚本解析)- 
作用:当 JavaScript 代码被浏览器解析时(但可能尚未执行),自动触发断点。
 - 
用途:
- 捕获所有 JavaScript 代码,包括 
script标签、document.write()、XHR动态加载的 JS。 - 分析 JavaScript 代码的执行顺序,找到影响页面加载的 JS 代码。
 - 监测防调试代码,如 
debugger;、Object.defineProperty(console, ...)之类的代码。 
 - 捕获所有 JavaScript 代码,包括 
 
 - 
 
script 断点的常见用途
| 场景 | 使用 script 断点的方式 | 
实际用途 | 
|---|---|---|
| 网站开启了防调试(F12 失效) | Script First Statement | 
拦截网站核心 JS 逻辑,找到 debugger; 代码并绕过 | 
| 网站动态加载 JavaScript | Script Parsed | 
监听 eval()、document.write() 等动态 JS 加载行为 | 
| 分析网页的核心 JavaScript 逻辑 | Script First Statement | 
逆向分析网页代码,找到关键的加密/解密逻辑 | 
| 调试某个 JS 文件 | Script Parsed + Script First Statement | 
找到 JS 代码的入口,逐步调试 | 
检测网站是否用 eval() 加载 JS | 
Script Parsed | 
监听 eval() 代码块并中断执行 | 
如何使用 script 断点?
- 打开 Chrome 开发者工具(F12 / 
Ctrl + Shift + I) - 切换到 
Sources面板 - 在右侧 
Event Listener Breakpoints面板中,展开script选项 - 勾选 
Script First Statement和Script Parsed - 刷新页面,观察代码执行情况
 

4.解决防抽
打开浏览器,在事件监听器断点中脚本(script)勾选上,然后输入地址就能进入断点

既然上面理解了防抽其实就是js代码的作用,我们就断点调试找到对应的代码注释或替换即可
每次加载js脚本都会进入断点,我们在文件搜索window.close,没有就跳过执行下一个,找到后打个断点

可以选择注释或者替换代码即可

5.防抽代码
onDevToolOpen 是一些网站用于检测开发者工具(F12)是否打开的防调试手段。
它通常结合 console.log、debugger 语句、performance API 或 特定事件监听 来实现。
开启了一个定时器监听onDevToolOpen事件

代码
这里不仅关闭浏览器,也启动定时器进行页面跳转
function p() {
                if (h.url)
                    window.location.href = h.url;
                else if (h.rewriteHTML)
                    try {
                        document.documentElement.innerHTML = h.rewriteHTML
                    } catch (o) {
                        document.documentElement.innerText = h.rewriteHTML
                    }
                else {
                    try {
                        // window.opener = null,
                        // window.open("", "_self"),
                        // window.close(),
                        // window.history.back()
                    } catch (o) {
                        console.log(o)
                    }
                    // setTimeout((function() {
                    //     window.location.href = h.timeOutUrl || "https://theajack.github.io/disable-devtool/404.html?h=".concat(encodeURIComponent(location.host))
                    // }
                    // ), 500)
                }
            }

📌 创作不易,感谢支持!
每一篇内容都凝聚了心血与热情,如果我的内容对您有帮助,欢迎请我喝杯咖啡☕,您的支持是我持续分享的最大动力!
                    
                
                
            
        
浙公网安备 33010602011771号