听说你想用开发者工具调试我的网站?挺可以的啊。25

news/2025/1/15 18:45:23/

本篇博客重点为大家介绍,如何禁止用户在浏览器中查看源码,禁用开发者工具调试等前端需求
案例已更新到 爬虫训练场

文章目录

    • 禁用右键,禁用 F12
    • 禁用 ctrl + U 查看源代码,禁用 ctrl + shift + i 打开开发者工具
    • 实现开发者工具无限 debugg
    • 调用开发者工具,展示固定页面

禁用右键,禁用 F12

在浏览器中查看源码,常用的方式有两种,鼠标右键和 F12 快捷键,让我们首先屏蔽这两个按键。

禁用 JavaScript 中的右键菜单

// 禁用右键菜单
document.oncontextmenu = function () {return false;
};

禁用右键菜单,可以使用 document.oncontextmenu 事件处理函数,这个函数在用户点击鼠标右键时调用。在函数中返回 false,可以禁用右键菜单。

禁用 F12

// 禁用 F12
document.onkeydown = function (e) {if (e.which === 123) {return false;}
};

禁用 F12,可以使用 document.onkeydown 事件处理函数,这个函数在用户按下键盘上的任何键时调用。在函数中检测键盘事件的 which 属性是否等于 123,如果是则返回 false,可以禁用 F12 键。

禁用 ctrl + U 查看源代码,禁用 ctrl + shift + i 打开开发者工具

如题所示,这两个快捷键也可以完成查看源码的操作,我们也需要将其禁用掉。

在 JavaScript 中可以使用 document.onkeydown 事件处理函数,这个函数在用户按下键盘上的任何键时调用。在函数中检测键盘事件的 ctrlKeyshiftKey 属性是否为 true,以及 which 属性是否等于 85(U)73(i),如果满足条件,则返回 false,这可以禁用 ctrl + Uctrl + shift + i

禁用 ctrl + U

document.onkeydown = function (e) {if (e.ctrlKey && e.which === 85) {alert("已经禁用");return false;}
};

禁用 ctrl + shift + i

document.onkeydown = function (e) {if (e.ctrlKey && e.shiftKey && e.which === 73) {alert("已经禁用");return false;}
};

实现开发者工具无限 debugg

debugger 是 JavaScript 中定义的一个专门用于断点调试的关键字,碰到该关键字,JavaScript 的执行便会在此处中断,进入调试模式。

该场景比较常见,当用户打开开发者工具时,就会进入无限 debugg,并且由于 JavaScript 代码中存在死循环或者递归,导致浏览器卡死。

该办法实现的原理是运用定时器实现,利用 setIntervalsetTimeout 开一个线程,间隔固定时间,执行一次 debugger,如果你打开控制台,就会进入 debugger 状态。

setInterval(function () {debugger;
}, 1000);setTimeout(function b() {debugger;setTimeout(b, 1000);
}, 1000);

经过检索,在网络上还找到一种相对复杂的实现,代码如下。

setInterval(function () {check();
}, 1000);
var check = function () {function doCheck(a) {if (("" + a / a)["length"] !== 1 || a % 20 === 0) {(function () {}["constructor"]("debugger")());} else {(function () {}["constructor"]("debugger")());}doCheck(++a);}try {doCheck(0);} catch (err) {}
};
check();

以上场景,当用户使用开发者工具之后,都会展示如下界面。
听说你想用开发者工具调试我的网站?挺可以的啊。25

调用开发者工具,展示固定页面

在 JavaScript 中可以使用插件来判断开发者工具是否被打开,该插件名称为 devtools-detector,它使用了一些技巧来检测开发者工具的使用,如检测页面的宽度和高度是否发生了变化,检测节点是否被移除等。

首先导入指定的 JS。

<script src="https://cdn.bootcdn.net/ajax/libs/devtools-detector/2.0.14/devtools-detector.min.js"></script>

然后使用下述基本判断代码。

<script type="text/javascript">devtoolsDetector.addListener(function(isOpen) {if (isOpen){$('#school_list').html('<h2>请不要使用开发者工具调试</h2>');}});devtoolsDetector.launch();
</script>

当使用其他方式打开开发者工具之后,主页面视图区域会直接被替换掉。如下所示。

听说你想用开发者工具调试我的网站?挺可以的啊。25

本案例到此结束,已更新到 爬虫训练场 欢迎大家访问学习。
项目同步到代码仓库 https://gitcode.net/hihell/spider_playground

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 830 篇原创博客

从订购之日起,案例 5 年内保证更新

  • ⭐️ Python 爬虫 120,点击订购 ⭐️
  • ⭐️ 爬虫 100 例教程,点击订购 ⭐️

http://www.ppmy.cn/news/12121.html

相关文章

stm32mp1 uboot启动流程分析

stm32mp1 uboot启动流程分析 本节主要关注uboot启动linux的流程&#xff0c;首先关注下uboot的环境变量 uboot环境变量 进入uboot以后回车输入print即可看到uboot的所有环境变量&#xff1a; 这里很多变量嵌套了一些流程&#xff0c;整理一下格式&#xff1a; altbootcmdru…

PyTorch实例3——迁移学习

传送门&#xff1a;蓝桥云课实验 目录1. 实验环境2. 实验目的3. 相关原理4. 实验步骤4.1 数据收集4.1.1加载数据4.1.2 GPU运算4.2 数据预处理4.3 创建模型4.3.1 构建迁移模型4.3.2 训练模型测试绘制图表4.3.2.1 预训练模式4.3.2.2 固定值模式4.4 结论1. 实验环境 Jupyter Note…

Puppeteer之Pyppeteer——Pyppeteer鼠标和键盘操作用法(2)

前言 本文是该专栏的第2篇,结合项目案例让你熟练使用pyppeteer,后面会持续分享Pyppeteer的干货知识,记得关注。 Pyppeteer是Puppeteer的Python版本,是Google基于Node.js开发的工具,可以通过JavaScript代码来操作chrome。所以在浏览器中绝大多数操作都可以使用Pyppeteer来…

高空探测数据处理--对流层顶选取

对流层的概念(维基百科) 对流层(英语:Troposphere)是地球大气层中最靠近地面的一层,也是地球大气层里密度最高的一层。它蕴含了整个大气层约75%的质量,以及几乎所有的水蒸气及气溶胶。 对流层从地球表面开始向高空伸展,直至对流层顶,即平流层的起点为止。对流层的上…

动态内存管理

动态内存管理一.为什么要有动态内存二.malloc和free二.calloc三.realloc一.为什么要有动态内存 开辟空间的方式有很多种&#xff0c;像是我们经常使用的整形&#xff0c;数组之类的都是直接在内存里开辟空间。 但是上述的开辟空间的方式有两个特点&#xff1a; 1. 空间开辟大小…

RocketMQ重试机制一次深入理解

背景 我们知道Consumer拉取消息、消费消息时分开的&#xff0c;分别由两个类去实现&#xff1a; 拉取消息&#xff1a;PullMessageService 消费消息&#xff1a;ConsumeMessageConcurrentlyService 消息消费流程 1.如果我们拉取到消息&#xff0c;准备提交ConsumeMessageCon…

Shell从入门到...

Linux 教程 | 菜鸟教程 文章目录什么是shell脚本shell脚本写法shell脚本语法交互式shell脚本shell脚本的数值计算test命令&&和||命令&#xff1a;中括号[]判断符默认变量shell脚本条件判断caseshell脚本函数shell脚本循环while循环for循环什么是shell脚本 我们已经能够…

黑马程序员SSM框架教程_Spring+SpringMVC+MyBatisPlus笔记(自学用,持续更新)

Spring的实现有两种方式&#xff0c;一是配置&#xff0c;二是注解 目录Spring_day01IOC、DIBean的基本配置、实例化、生命周期Bean的基本配置bean的实例化训练中的不足1&#xff1a;bean的生命周期DI相关内容setter注入构造器注入小结自动注入集合注入Spring_day02Spring_day0…