Python爬虫:js逆向调式操作及调式中遇到debugger问题
Python爬虫:js逆向调式操作及调式中遇到debugger问题
- 1. 前言
- 2. js逆向调式操作
- 2.1 DOM事件断点
- 2.2 XHR/提取断点(用于请求接口参数加密处理)
- 2.3 请求返回的数据是加密的
- 2.4 hook定位参数
- 3. 调式中遇到debugger问题
- 3.1 解决方式(一律不在此处暂停)
- 3.2 问题:点击一律不在此处暂停之后解开断点,出现卡死(页面卡死)
- 3.3 问题:无法打开开发者工具(网站检测)
1. 前言
本篇博客主要讲解js逆向调式操作及调式中遇到debugger问题,内容参考自网上的一些视频讲解结合自己所做过的爬虫测试,觉得小编总结的还不错的读者记得点赞支持一下(内容仅供学习使用)。

2. js逆向调式操作
2.1 DOM事件断点
比如虎牙直播登录操作,想快速找到找到执行登录操作的那一段js代码,可以找到登录按钮对应的事件监听器,可以这下面刚好有一个点击事件(如果有多个无法判断的事件,那么依次把这些事件进行移除,如果移除之后,在没有输入任何数据时点击登录按钮没有提示,那么这个事件就是我们要找的那个了)。如下:


2.2 XHR/提取断点(用于请求接口参数加密处理)
比如某云音乐,我搜索了一首歌曲,网址下面会给出搜索内容。这是一个ajax请求,请求方式为post请求,请求参数进行了加密操作,如果想用Python模拟js加密,那么首先需要找到加密的地方。这个是那个post请求链接: https://music.163.com/weapi/cloudsearch/get/web?csrf_token=,把域名后面的内容copy,即weapi/cloudsearch/get/web?csrf_token,然后在XHR/t提取断点中添加上述copy的内容,刷新一下当前网址,即可找到发起请求那段js代码。(如果是get请求,那么需要copy的则是域名后到?之前的字符内容)


然后点击堆栈中调用点,可以找到加密处处理在这里。

这样我们简简单单就可以找到js加密处,然后用Python(调用一些可以执行js代码的模块[如果复杂的话])模仿加密过程即可。(当然也可以使用请求参数的关键词 encSecKey params进行查找,不过如果关键词简单,比如单个字符,那么这种方式不适用(js代码中可能有多个这样字符))
2.3 请求返回的数据是加密的
这种情况比如西瓜视频,在西瓜视频这个平台上你点击某个视频进行观看,如果想把这个视频下载下来。按F12键来到开发者工具,可以很快地在一个script标签内找到视频的相关数据,但是下载链接进行了加密处理。

找到解密函数,然后用Python模仿js解密即可(如果不懂,直接调用Python可以执行js代码的模块)。
2.4 hook定位参数
1. 覆盖原函数
var xxx = function(){console.log('java')
}
// xxx() 执行结果为 java
xxx = function(){console.log('javascript');
}
// xxx() 执行结果为 javascript
2. 覆盖浏览器环境的方法
window.alert('哈哈')
// 弹出一个提示框 内容为 哈哈
window.alert = function(){console.log('哈哈')}
window.alert('哈哈')
// 在控制台上输出 哈哈
可以使用Object.defineProperty替换一个对象的属性,属性可能是方法,有可能是值。
比如现在想知道百度网址上那些cookie中那些值的来源生成,如下:

我们可以点击网络下的第一个js接口,然后鼠标右键点击在“来源“面板中打开,然后在第一段js代码处下一个断点,之后把cookie中值清空,然后刷新一下网页。

然后在控制台上输入下述代码
(function(){let a = '';Object.defineProperty(document,'cookie',{set:function(val){console.log(val);a = val;return val;},get:function(){return a;}});
})();
然后把断点解开,可以发现此时控制台会打印出一些还没有生成的cookie中值,如下。

然后把上述我们自己写的代码也下一个断点,如下:

之后把cookie值清空,然后再刷新界面,然后再在控制台上输入上述代码,然后解开断点,可以发现如下:

点击堆栈中项,可以找到cookie中的值生成来源。

由于下断点的js文件可能不是第一个执行的js代码,而且在html界面也有js代码,所以即使断住,cookie中的值也生成了一部分。

如果觉得这样比较繁琐(毕竟需要刷新两次,那么用下述代码,多加个debugger)
(function(){let a = '';Object.defineProperty(document,'cookie',{set:function(val){debugger;console.log(val);a = val;return val;},get:function(){return a;}});
})();
然后解开断点,依旧可以在堆栈中获取到cookie中值生成的断点。
3. 调式中遇到debugger问题
就是打开开发者工具下,我们自己没有下断点,然后浏览器开发者工具会在源代码下某个文件下自动断住(使用debugger),防止你进行调试操作。
3.1 解决方式(一律不在此处暂停)
在debugger这一行左边鼠标右键点击一律不在此处暂停选项,然后再刷新当前界面,可以正常进行调试操作(如果有多个这样的,执行上述重复操作[一律不在此处暂停])。

3.2 问题:点击一律不在此处暂停之后解开断点,出现卡死(页面卡死)

就是按照上述3.1那种方式进行处理,浏览器出现卡死现象(原因:前端js 构造器 构造debugger函数,还在继续写入,从而导致内存溢出)。对这个debugger的堆栈下某一项进行断点操作,然后刷新当前界面,可以发现界面构造了一个debugger操作,如下:


解决方式,在源代码下->显示导航栏->更多标签页->代码段->添加新代码段,随便起个名称,然后输入如下代码:
aa = Function.prototype.constructor;
Function.prototype.constructor = function(name) {if(name == 'debugger'){return function(){};}return aa(name);
}
然后点击右下角Ctrl+Enter进行注入,然后解开断点,此时页面不会出现卡死现象。

3.3 问题:无法打开开发者工具(网站检测)
就是无论用那种方式(按电脑键盘F12、鼠标右键点击检查),在界面上都无法打开开发者工具进行调试(即使打开开发者工具下,刷新网页,又会出现其他检测,防止我们进行调试操作或者其他操作)。

此时选择浏览器选项->更多工具->开发者工具,强制打开开发者工具。

出现debugger,进入debugger,发现 检测我们操作的js如下:

发现它对浏览器宽度进行的检测(除开发者工具之外的地方的宽度),可以通过把开发者工具停靠在单独的窗口,这样我们可以继续我们自己的调试或者其他操作。

相关文章:
Python爬虫:js逆向调式操作及调式中遇到debugger问题
Python爬虫:js逆向调式操作及调式中遇到debugger问题 1. 前言2. js逆向调式操作2.1 DOM事件断点2.2 XHR/提取断点(用于请求接口参数加密处理)2.3 请求返回的数据是加密的2.4 hook定位参数 3. 调式中遇到debugger问题3.1 解决方式(一律不在此处暂停)3.2 问题:点击一律…...
HTML网页制作技巧:打造出色的用户体验
HTML是构建网页的基础语言,掌握一些关键的技巧可以帮助您创建出色的用户体验。本文将介绍一些HTML网页制作的技巧,从布局和样式到交互和可访问性,为您提供有用的指导。无论您是初学者还是有经验的开发者,这些技巧都将对您的网页设…...
探究使用HTTP代理ip后无法访问网站的原因与解决方案
目录 访问网站的原理是什么 1. DNS解析 2. 建立TCP连接 3. 发送HTTP请求: 4. 服务器响应: 5. 浏览器渲染: 6. 页面展示: 使用代理IP后访问不了网站,有哪些方面的原因 1. 代理IP的可用性: 2. 代理…...
SpringBoot 全局异常处理进阶
待总结 参考文章: SpringBoot 全局异常处理进阶:使用 ControllerAdvice 对不同的 Controller 分别捕获异常并处理 SpringBoot 对 controller 层捕获全局异常并处理的方法(ControllerAdvice 和 ExceptionHandler) 注解RestCont…...
数据结构(一):顺序表详解
在正式介绍顺序表之前,我们有必要先了解一个名词:线性表。 线性表: 线性表是,具有n个相同特性的数据元素的有限序列。常见的线性表:顺序表、链表、栈、队列、数组、字符串... 线性表在逻辑上是线性结构,但…...
【周末闲谈】人工智能热潮下的AIGC到底指的是什么?
生成式人工智能AIGC(Artificial Intelligence Generated Content)是人工智能1.0时代进入2.0时代的重要标志。 个人主页:【😊个人主页】 系列专栏:【❤️周末闲谈】 系列目录 ✨第一周 二进制VS三进制 ✨第二周 文心一…...
sklearn垃圾邮件分类
在Python中,可以使用机器学习算法来进行垃圾邮件分类。下面是一个简单的示例,使用朴素贝叶斯算法进行垃圾邮件分类: import pandas as pd from sklearn.feature_extraction.text import CountVectorizer from sklearn.model_selection impor…...
UI美工设计岗位的工作职责
UI美工设计岗位的工作职责1 职责: 1、负责软件界面的美术设计、创意工作和制作工作; 2、根据各种相关软件的用户群,提出构思新颖、有高度吸引力的创意设计; 3、对页面进行优化,使用户操作更趋于人性化; 4、维护现有的应用产品; 5、收集和…...
ES6链判断运算符(?.)的正确打开方式
在实际应用中,如果读取对象内部 的某个属性,往往需要判断一下,属性的上层对象是否存在。比如,读取message.body.user.firstName这个属性,安全的写法是写成下下面这样: // 错误的写法 const firstName mes…...
删除块参照 删除块定义
删除块参照 void CDwgDatabaseUtil::DeleteBlockReference(CString strBlockName) {// 锁定文档acDocManager->lockDocument(acDocManager->curDocument());AcDbObjectId objRecId;if (...
机器学习笔记:李宏毅ChatGPT:生成式学习的两种策略
1 策略1 “各个击破”——autoregressive model “各个击破”——一个一个生成出来 2 策略2 : “一次到位”——non-autoregressve model 一步到位,全部生成出来 2.1 non-autoregressive model 如何确定长度? 两种策略 策略1:始…...
React 组件防止冒泡方法
背景 在使用 antd 组件库开发时,发现点击一个子组件,却触发了父组件的点击事件,比如,我在一个折叠面板里面放入一个下拉框或者对下拉框列表渲染做定制,每个下拉框候选项都有一个子组件… 解决 其实这就是 Javascri…...
MAUI+Blazor 如何开启浏览器调试工具
文章目录 前言如何开启调试模式输入快捷键打开浏览器有什么意义? 前言 MAUIBlazor其实就是浏览器套壳,我觉得很有意义,因为现在性能已经不是主要的限制了,很多时候讲究的快速开发。而且MAUIBlazor跨平台的未来感觉实在是太香了。…...
【Spring MVC】Spring MVC基于注解的程序开发
目录 一、什么是Spring MVC 二、Spring MVC项目的创建和使用 1、实现客户端和服务器端之间的连接 1.1、RequsestMapping注解 1.2、RequestMapper的简单使用 1.3、使用GetMapping和POSTMapping注解来实现HTTP连接 三、获取参数 1、实现获取单个参数 2、实现获取对象 3…...
前端探索之旅
目录 简介:内容大纲:第一章 前端开发简介1.1 前端开发的定义和作用1.2 前端开发的职责1.3 前端开发的技能要求1.4 前端开发的发展前景总结: 第二章 HTML基础2.1 HTML基本结构2.2 常见HTML标签和元素 第三章 CSS基础3.1 CSS基本语法3.2 常见CSS选择器3.3 常见CSS属性…...
“冰箭卫士·IP发布会”首次亮相第14届海峡两岸(厦门)文博会
2023年8月6日,“冰箭卫士IP发布会”首次亮相海峡两岸文博会思明馆。此次发布会由厦门市文化创意产业协会、厦门理工(集美区)政产学研基地主办,厦门市文化创意产业协会IP设计研究院、厦门一笔之上文化发展有限公司、冰箭应急安全科技研究院承办…...
数学建模学习(9):模拟退火算法
模拟退火算法(Simulated Annealing, SA)的思想借 鉴于固体的退火原理,当固体的温度很高的时候,内能比 较大,固体的内部粒子处于快速无序运动,当温度慢慢降 低的过程中,固体的内能减小,粒子的慢慢趋于有序&a…...
带你认识储存以及数据库新技术演进
01经典案例 1.0 潜在问题 02存储&数据库简介 2.1 存储器层级架构 2.1 数据怎么从应用到存储介质 2.1 RAID技术 2.2 数据库 数据库分为 关系型数据库 和 非关系型数据库 2.2.2 非关系型 2.2.1 关系型 2.3 数据库 vs 经典存储-结构化数据管理 2.3.1 数据库 vs 经典存储-事务能…...
腾讯云服务器镜像操作系统大全_Linux_Windows清单
腾讯云CVM服务器的公共镜像是由腾讯云官方提供的镜像,公共镜像包含基础操作系统和腾讯云提供的初始化组件,公共镜像分为Windows和Linux两大类操作系统,如TencentOS Server、Windows Server、OpenCloudOS、CentOS Stream、CentOS、Ubuntu、Deb…...
基于k8s job设计与实现CI/CD系统
方案一:Jenkinsk8sCICD 方案二:kanikok8s jobCICD CICD 基于K8s Job设计流水线 CI方案 工具镜像 云原生镜像打包工具 kaniko的使用 与Jenkins对比 可用性与易用性...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
