文章目录

  • 总览
  • 终端模拟
  • Network 面板
    • Controls 控制器
    • Filter 过滤器
  • 断点调试
    • 常规断点调试
    • XHR 断点
    • 行为断点
  • 插入 JS
  • 打印 windows 对象的值
  • 无限 debugger 防调试
    • 中间人拦截替换无限 debug 函数
    • 方法置空
    • 解除定时器
  • Hook 钩子
    • 配置文件 manifest.json
    • header 钩子
    • cookie 钩子
    • 请求钩子

总览

浏览器开发者工具在爬虫中常用来进行简单的抓包分析、JS逆向调试,打开方式:

  1. F12;
  2. 快捷键 Ctrl+Shift+I;
  3. 鼠标右键检查或者审查元素;
  4. 浏览器右上角 —> 更多工具 —> 开发者工具

常见禁用开发者工具手段:https://blog.csdn.net/cplvfx/article/details/108518077

官方文档:https://developer.chrome.com/docs/devtools/

  • Elements(元素面板):使用“元素”面板可以通过自由操纵 DOM 和 CSS 来重您网站的布局和设计。

  • Console(控制台面板):在开发期间,可以使用控制台面板记录诊断信息,或者使用它作为 shell,在页面上与 JavaScript 交互。

  • Sources(源代码面板):在源代码面板中设置断点来调试 JavaScript ,或者通过 Workspaces(工作区)连接本地文件来使用开发者工具的实时编辑器。

  • Network(网络面板):从发起网页页面请求 Request 后得到的各个请求资源信息(包括状态、资源类型、大小、所用时间等),并可以根据这个进行网络性能优化。

  • Performance(性能面板):使用时间轴面板,可以通过记录和查看网站生命周期内发生的各种事件来提高页面运行时的性能。

  • Memory(内存面板):分析 web 应用或者页面的执行时间以及内存使用情况。

  • Application(应用面板):记录网站加载的所有资源信息,包括存储数据(Local Storage、
    Session Storage、IndexedDB、Web SQL、Cookies)、缓存数据、字体、图片、脚本、样式
    表等。

  • Security(安全面板):使用安全面板调试混合内容问题,证书问题等等。

  • Lighthouse(诊断面板):对当前网页进行网络利用情况、网页性能方面的诊断,并给出一些优化
    建议。


元素选择:可以直接点击页面的元素,会自动跳转到对应的源代码。


终端模拟:模拟各种终端设备,支持自定义终端。


设置:开发者工具设置,包括一些外观、快捷置、终端设备、地理位置设置等。


自定义:自定义和控制开发者工具,包括调整工具的位置、全局搜索、运行命令、其他工具等。


终端模拟

点击 可以模拟各种终端设备,适合查看手机页面的数据,点击【More tools】—> 【Sensors】可以模拟终端的地理位置、终端朝向等;工具栏可以选择要模拟的终端型号,其中 Responsive 是自适应。


Network 面板

Controls 控制器

  • Preserve log:是否在页面重加载后,清除请求列表。

  • Disable cache:是否启用缓存。


是否开启抓包

清除请求

是否隐藏 Filter(过滤器)窗格


搜索


Network conditions,网络条件,允许在各种网络环境中测试网站,包括 3G,离线等,还可以自定义限制最大下载和上传流量


Import/Export HAR file,导入导出抓包数据。

Filter 过滤器

  • Hide data URLs:data URLs 指一些嵌入到文档中的小型文件,在请求表里面以 data: 开头的文件就是,如较为常见的 svg 文件。勾选 Hide data URLs复选框即可隐藏此类文件。

  • All:显示所有请求。

  • XHR:全称 XMLHttpRequest,是一种创建 AJAX 请求的 JavaScript API,通常抓取 Ajax 请求可以选择 XHR。

  • WS:全称 WebSocket,是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。

  • Manifest:安卓开发文件名,属于 AndroidManifest.xml 文件,在简单的 Android 系统的应用中提出了重要的信息码。

  • Has blocked cookies:仅显示具有阻止响应 cookie 的请求。

  • Blocked Requests:只显示被阻止的请求。

断点调试

常规断点调试

适用于分析关键函数代码逻辑

  1. Ctrl+Shift+F 或者右上角三个点打开全局搜索,搜索关键字。
  2. 定位到可疑代码,点击行号埋下断点。
  3. 调试代码,分析逻辑,其中 console 模板可以直接编写 JS 代码进行调试。

各个选项功能:

执行到下一个断点

执行下一步,不会进入所调用的函数内部

进入所调用的函数内部

跳出函数内部

一步步执行代码,遇到有函数调用,则进入函数

停用断点

不要在出现异常时暂停

  • Breakpoints:可以看到已经埋下的断点。

  • Scope:可以看到当前局部或者全局变量的值,可对值进行修改。

  • Call Stack:可以看到当前代码调用的堆栈信息,代码执行顺序为由下至上。

XHR 断点

匹配 url 中关键词,匹配到则跳转到参数生成处,适用 于url 中的加密参数全局搜索搜不到,可采用这种方式拦截。

行为断点

Event Listener Breakpoints,事件侦听器断点,当鼠标点击、移动、键盘按键等行为或者其他事件发生时可以触发断点,比如 Mouse —> click,可快速定位点击按钮后,所执行的 JS。


插入 JS

在 sources —> snippets 下可以新建 JS 脚本。


打印 windows 对象的值

在 console 中输入如下代码,如只打印 _$ 开头的变量值:

for (var p in window) {if (p.substr(0, 2) !== "_$") continue;console.log(p + " >>> " + eval(p))
}

无限 debugger 防调试

某些页面打开调试工具会出现无限 debugger 的现象:

中间人拦截替换无限 debug 函数

查看调用栈,点击第二行跳转到原函数:

可以看到 _0x2ba9bc[_0x20b2('0x79')]_0x2ba9bc[_0x20b2('0x7a')] 分别对应 debu 和 gger,连起来就是 debugger,在本地重写这个 JS,直接将这两个值置空:

使用插件 ReRes,编写规则,遇到此 JS,就替换成我们本地经过修改过的 JS,替换后无限 debugger 就不存在了:


方法置空

直接在 Console 中将无限 debugger 的函数重写置空也可以破解无限 debugger,缺点是刷新后失效。

解除定时器

适用于定时器类触发的 debug:

for (var i = 1; i < 99999; i++)window.clearInterval(i);

Hook 钩子

钩子英文 Hook,在 windows 系统中,所有的都是消息,按了一下键盘,就是一个消息,Hook 的意思就是勾住,在消息过去之前先把消息勾住,不让其执行,然后自己优先处理。也就是这个技术提供了一个入口,能够针对不同的消息或者 api 在执行前,先执行我的操作。“我的操作”就是钩子函数。在开发者工具中以 chrome 插件的方式,在匹配到关键词处插入断点。

创建一个文件夹,文件夹中创建一个钩子函数文件 inject.js 以及插件的配置文件 manifest.json :

打开 chrome 的扩展程序, 打开开发者模式,加载已解压的扩展程序,选择创建的文件夹即可:

配置文件 manifest.json

以一个 header 钩子为例,其配置文件如下:

{"name": "Injection","version": "1.0","description": "RequestHeader钩子","manifest_version": 1,"content_scripts": [{"matches": ["<all_urls>"],"js": ["inject.js"],"all_frames": true,"permissions": ["tabs"],"run_at": "document_start"}]
}

header 钩子

header 钩子用于定位 header 中关键参数生成位置,以下代码演示了当 header 中包含 Authorization 时,则插入断点

var code = function(){var org = window.XMLHttpRequest.prototype.setRequestHeader;
window.XMLHttpRequest.prototype.setRequestHeader = function(key,value){if(key=='Authorization'){debugger;}return org.apply(this,arguments);
}
}
var script = document.createElement('script');
script.textContent = '(' + code + ')()';
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);

cookie 钩子

cookie 钩子用于定位 cookie 中关键参数生成位置,以下代码演示了当 cookie 中匹配到了 abcdefghijk, 则插入断点:

var code = function(){var org = document.cookie.__lookupSetter__('cookie');document.__defineSetter__("cookie",function(cookie){if(cookie.indexOf('abcdefghijk')>-1){debugger;}org = cookie;});document.__defineGetter__("cookie",function(){return org;});
}
var script = document.createElement('script');
script.textContent = '(' + code + ')()';
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);

请求钩子

请求钩子用于定位请求中关键参数生成位置,以下代码演示了当请求的 url 里包含 AbCdE 时,则插入断点:

var code = function(){var open = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function (method, url, async){if (url.indexOf("AbCdE")>-1){debugger;}return open.apply(this, arguments);
};
}
var script = document.createElement('script');
script.textContent = '(' + code + ')()';
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);

【爬虫知识】浏览器开发者工具使用技巧总结相关推荐

  1. 检测浏览器开发者工具是否打开了

    在某些情况下我们需要检测当前用户是否打开了浏览器开发者工具,比如前端爬虫检测,如果检测到用户打开了控制台就认为是潜在的爬虫用户,再通过其它策略对其进行处理.本篇文章主要讲述几种前端JS检测开发者工具是 ...

  2. JS检测,禁用浏览器开发者工具之6大方法探讨

    [第一种] debugger setInterval(function () {check()}, 1000);var check = function () {function doCheck(a) ...

  3. 浏览器开发者工具基本使用教程

    浏览器开发者工具基本使用教程 在阅读下面内容之前,那么些简单的了解浏览器开发者工具到底是什么东西,到底有什么用途. 浏览器开发者工具到底是什么? 其实简单的说,浏览器开发者工具就是给专业的web应用和 ...

  4. 谷歌 chrome 浏览器开发者工具打不开的解决方法

    谷歌 chrome 浏览器开发者工具打不开的解决方法 参考文章: (1)谷歌 chrome 浏览器开发者工具打不开的解决方法 (2)https://www.cnblogs.com/youding/p/ ...

  5. chrome浏览器开发者工具F12中某网站的sources下的源码如何批量保存?

    目录 chrome浏览器 开发者工具F12中某网站的sources下的源码如何批量保存 1. 常用保存Sources源码的两种方法 1.1单个文件 1.2 单个页面 2. 问题 3.解决方案 chro ...

  6. Fiddler及浏览器开发者工具进行弱网测试

    ------·今天距2021年265天·------ 这是ITester软件测试小栈第110次推文 在上一篇Fiddler系列文章:Fiddler跨域调试及Django跨域处理,主要介绍了跨域原理.F ...

  7. Chrome浏览器 开发者工具中的 Performance

    目录 ■Chrome浏览器 开发者工具中的 Performance ■画面 ■代码 (2009年前后,大学时期写的代码.) ■工作中的使用 (两个系统同时运行) --- ■Chrome浏览器 开发者工 ...

  8. 谷歌Chrome浏览器开发者工具教程—JS调试篇

    上一篇我们学习了谷歌Chrome浏览器开发者工具的基础功能,下面介绍的是Chrome开发工具中最有用的面板Sources. Sources面板几乎是最常用到的Chrome功能面板,也是解决一般问题的主 ...

  9. 浏览器开发者工具菜鸡相谈

    浏览器开发者工具的初心者浅谈 一.什么是开发者工具: 其实简单的说,浏览器开发者工具就是给web应用和网站开发人员使用的工具,在其中web开发者可以查看或调试网页的内容和属性and so on... ...

  10. linux电视浏览器下载软件,【UC浏览器开发者工具Linux版】UC浏览器开发者工具下载 v0.4.1 Linux版-趣致软件园...

    UC浏览器开发者工具Linux版是一款专门针对UC浏览器开发者版本所推出的调试工具,这款软件完美兼容DevTools Protocol,因此用户无需再搭配其它工具便可以快速有效的完成调试工作.除此之外 ...

最新文章

  1. 用 Python 帮运营妹纸快速搞定 Excel 文档
  2. 我是唯一一个不介意BCH被称为BCH而不是BTC(目前)的人吗?
  3. 算法--------二叉树的前序遍历
  4. C#/.NET基于Topshelf创建Windows服务的守护程序作为服务启动的客户端桌面程序不显示UI界面的问题分析和解决方案
  5. 在 ASP.NET 上实现锁定表头、支持滚动的表格的做法
  6. 储存外部资源的Android项目子目录,Android资源使用
  7. TypeScript 枚举指南
  8. java api项目配置统一的错误返回json提示
  9. 可视化类激活的热力图
  10. if else if语句格式_Python中的if条件语句
  11. pymongo 怎么判断数据有没有添加成功_Python爬虫入门教程 29-100 手机APP数据抓取 pyspider...
  12. [4G5G专题-81]:流程 - 4G LTE 小区切换流程大全
  13. 遥感学习笔记:遥感数据源免费数据获取途径
  14. Flink SQL Size of the state is larger than the maximum permitted memory-backed state
  15. Android 实现百度地图骑行路线规划,骑行路线规划
  16. strtolower() 把字符串转换为小写字母
  17. windows使用Certbot配置nginx的https证书
  18. maven 本地仓库的配置以及如何修改默认.m2仓库位置
  19. Platform 概述
  20. 飞行员态势感知的机理研究

热门文章

  1. 关于怎么解决org.apache.ibatis.binding.BindingException: Mapper method attempted to return null from a met
  2. python的十句名言_“洗 脑”最厉害的10句名言!经典!
  3. 币圈投资必败的5种“韭菜”人格
  4. DCO-OFDM可见光通信matlab
  5. Linux之Iptables防火墙管理与配置~
  6. mysql控制台中文显示问号_控制台的中文全都是问号
  7. c语言我想你,c语言土味情话
  8. ipad pro + zotero + 坚果云 + PDF Expert 搭建多平台文献管理(自用备忘)
  9. 尚来古籍——江氏族谱
  10. 什么是V2X?如何通过V2X技术实现5G智慧交通?(一)