浏览器反爬-打不开开发工具

浏览器反爬-打不开开发工具

前言

身在深渊中,何须怕深渊

有些网站为防止爬虫,打开页面后再打开开发者工具导致页面跳转或者打不开页面

⚠️声明:本文所涉及的爬虫技术及代码仅用于学习、交流与技术研究目的,禁止用于任何商业用途或违反相关法律法规的行为。若因不当使用造成法律责任,概与作者无关。请尊重目标网站的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 打开时启用,但现在已被屏蔽。

检测 Firebug(旧版 Firefox)

通过 console.firebug 和 console.table() 关键字检测 Firebug,但该工具已停止维护。

窗口大小变化检测(有效)

window.outerHeight - window.innerHeight > 200

如果窗口高度变化超过 200px,说明 DevTools 可能被打开,触发 fanchou() 清空页面。

定时 setInterval() 检测

每 2 秒 运行 ck() 进行检测,若发现异常则清空页面。

地址:

这段 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, ...) 之类的代码。

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)

}

}

📌 创作不易,感谢支持!

每一篇内容都凝聚了心血与热情,如果我的内容对您有帮助,欢迎请我喝杯咖啡☕,您的支持是我持续分享的最大动力!

相关推荐

移动如何降低手机套餐 – 移动套餐省钱全攻略:2025年实测有效5步法
荣耀Magic6 Pro充满电需要多长时间?
beat365上不去

荣耀Magic6 Pro充满电需要多长时间?

📅 08-20 👁️ 4751
世界杯32强已定30席!欧洲区13队全出炉,威尔士与英格兰美国同组
365风控审核不给提款怎么办

世界杯32强已定30席!欧洲区13队全出炉,威尔士与英格兰美国同组

📅 08-01 👁️ 8122