高级实战案例:Python反反爬之JavaScript混淆

2023-11-09

写在前面

很早之前在吾爱破解论坛上看见了【猿人学】Web端爬虫攻防大赛,当时进入他们官网的时候,比赛已经结束了。看着那些题目还挺有意思的,但由于各种原因一直没有机会去做那些题目。最近比较闲,就去把猿人学官网打开看了一下,尝试着完成了第一道题目---JS混淆[源码乱码]

"""
当然在学习Python的道路上肯定会困难,没有好的学习资料,怎么去学习呢? 
学习Python中有不明白推荐加入交流群号:928946953 
群里有志同道合的小伙伴,互帮互助, 群里有不错的视频学习教程和PDF!
还有大牛解答!
"""

题目


题目网址点我去刷题

抓取所有(5页)机票的价格,并计算所有机票价格的平均值,填入答案。


题目看着挺简单,就是抓取机票的价格,并算出平均值,但是当我们打开开发者调试工具的时候,就会遇到第一个坑

关闭断点

当我们打开调试工具的时候,会弹出这么一个页面


这是一个debug断点,会阻拦我们后面的操作,但是并没有什么关系,很简单就能把它关闭

查看数据来源

接着,我们点击【Network】,按ctrl+f5刷新网页,又会出现阻拦的操作,我们依然点击刚才箭头符号,就可以解决

接着,我们回到【Network】,点击【XHR】,就会发现多了一条信息
至于,为什么要去点击【XHR】而不是点击其他的地方;其实也很简单,你稍微去检测一下这个网页,就会发现,机票的价格是通过XHR请求获取到的

有些小伙伴可能就要问了,什么是XHR请求,你可以去这篇文章看看XHR 请求


回过头来,我们来看看多出来的那条信息


查看这条信息的Header,发现它的URL很有意思,特别是画蓝色下划线的地方,这里我们先不管,我们接着看一下Preview

这就更有意思了,如我们所预料的,机票的价格都包含在这里面

分析URL

链接和数据都找了,我们去访问一下刚刚的链接(间隔了一段时间),理所当然的报错了

{"error": "token failed"}

JavaScript

复制

我们看一下这条链接

http://match.yuanrenxue.com/api/match/1?m=f289e3140053a9320c137b67e8723ba3%E4%B8%A81608971657

经常写爬虫的同学就会发现,后面的数字串【1608971657】,一定是一个时间戳
也就是说,要想正常的访问这条链接拿到数据,一定要有正常的时间戳
那么,何为正常的时间戳,一定和前面的字符串有关(m=
f289e3140053a9320c137b67e8723ba3%E4%B8%A8)

我们继续刷新页面,发现【m=...】里面的字符串随着时间的推移都在进行变化,唯独[%E4%B8%A8]没变

[%E4%B8%A8],这个我想大家只要用过百度搜索就应该很熟悉吧,它是经过UrlEncode处理得到的,我们只需要反解码就能知道[%E4%B8%A8]到达是个什么东东
我们来到,站长工具,将它进行解码


很容易的,我们得到了它的值------>(没错就是这么一个中文符号)

寻找丨符号

根据题目的提示[js混淆 源码乱码],我们可以想到一个很清晰的思路,就是去源码当中查找 
回到页面,点击鼠标右键,点击[查看网页源代码]
按crtl+F ,搜索 符号,会找到唯一的一处代码
仔细地查看代码,发现它是写在script标签里面的
我们将整个script标签复制下来,到notepad++里面打开

<script>window.url='/api/match/1';request=function(){var timestamp=Date.parse(new Date()) + 100000000;var m=oo0O0(timestamp.toString())+window.f;var list={"page":window.page,"m":m+'丨'+timestamp/1000};$.ajax({url:window.url,dataType:"json",async:false,data:list,type:"GET",beforeSend:function(request){},success:function(data){data=data.data;let html='';let us_sign=`<div class="b-airfly"><div class="e-airfly"data-reactid=".1.3.3.2.0.$KN5911.0"><d
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高级实战案例:Python反反爬之JavaScript混淆 的相关文章

随机推荐

  • [Android]【安卓】Service详解

    Android 安卓 Service详解 本篇博客已收录到我的安卓开发小结中 点击 安卓开发小结 参考资料 Android总结篇系列 Android Service 第一行代码 Android总结篇系列 Android Service Se
  • Qt中主线程如何不优雅地结束掉一个被卡死的子线程

    前提 这里所说的子线程其实是一个类 使用如下代码让其实例化对象运行在单独的线程中 例如是一个class A 如下代码中m thread是在 h文件里声明 其余代码是在A的构造函数中 QThread m thread this gt move
  • 支付宝小程序中网络请求 my.request({}) 的用法

    支付宝小程序网络请求官方文档 https docs alipay com mini api network Page data name 支付宝小程序 onLoad query 页面加载 在这里请求接口 console info Page
  • 2022年9月电子学会C语言等级考试试卷(四级)答案解析

    一 上升子序列 一个数字的序列b i 当b 1 lt b 2 lt lt b S的时候 我们称这个序列是上升的 对于给定的一个序列 a
  • visual studio 2022换背景遇到的问题

    如果要自定义背景图 则可以下载ClaudialIDE 1 在拓展 gt 点击拓展管理 gt 右上角搜索background gt 点击下载ClaudialIDE gt 加载完之后需要关闭vs界面进行下载 下载失败 弹出 由于出现以下错误 无
  • html ul纵向不换行,ul li列表并排 不换行css布局

    如何使用CSS样式让ul li列表标签布局并排显示不换行篇 默认ul li布局竖列显示 这里CSS5介绍使用两种使用css样式让li标签布局并排显示 一种使用css display 另外一种使用css float浮动 一 使用display
  • GitWeb

    本文转载至 http www gitchina org getting started pro git gitweb html 现在我们的项目已经有了可读可写和只读的连接方式 不过如果能有一个简单的 web 界面访问就更好了 Git 自带一
  • 算法_统计二叉树第k层的结点个数

    统计第k层的结点个数 全局变量版 int cnt 0 void count node k BTNode bt int k int h if bt NULL return else if h k cnt else if h lt k coun
  • 应用pca和K-means实现用户对物品类别的喜好细分划分

    学习目标 应用pca和K means实现用户对物品类别的喜好细分划分 数据如下 order products prior csv 订单与商品信息 字段 order id product id add to cart order reorde
  • python中的类的基本概念

    主要参考博客 https www cnblogs com chengd articles 7287528 html 以下内容主要摘抄以上博主博客 一 基本概念 类 就是类似于C 中的类 类变量 类变量在整个实例化的对象中是公用的 类变量定义
  • 华为HCIE云计算之FA云桌面发放(Microsoft AD方式)

    华为HCIE云计算之FA云桌面发放 windowsAD方式 一 检查FC状态 二 FA01虚拟机安装FA组件 1 一键安装FA组件 选择Microsoft AD模式 2 配置本地服务器IP 3 查看组件安装状态 三 FA02虚拟机安装VAG
  • 软件测试基础(三)代码检查与走查

    两种主要的人工测试方法 都是以一组人员为单位 用于代码检查的错误列表 1 数据引用错误 2 数据声明错误 3 运算错误 4 比较错误 5 控制流程错误 6 接口错误 7 输入输出错误 代码走查与检查
  • HTML5的魅力,10个Demo展示

    Flash和HTML5的比较已经成为现在最热门的主题之一 我们不去争论哪个好哪个不好 和HTML5在很酷的动画和简单的游戏等方面一样 除非HTML5在未来几年有一些重大发展 否则Flash在富内容网页应用和游戏方面永远是不错的选择 下面收集
  • [数据库] Navicat for MySQL触发器更新和插入操作

    一 触发器概念 触发器 trigger 监视某种情况 并触发某种操作 它是提供给程序员和数据分析员来保证数据完整性的一种方法 它是与表事件相关的特殊的存储过程 它的执行不是由程序调用 也不是手工启动 而是由事件来触发 例如当对一个表进行操作
  • 获取机器人turtlebot3 在gazebo 中仿真导航时的位姿真值

    背景 机器人在gazebo环境中仿真导航 除了实时获取传感器数据估计机器人位姿外 为了验证定位算法的精度 我们需要获得机器人在gazebo worlds下的真实位姿 方法一 在机器人模型的urdf文件或者sdf文件中加入一个ros plug
  • ruoyi+vue回显数字的问题,解决方案

    在项目中用ruoyi框架和前端vue进行开发 需求是在前端生成下拉框 下拉框中的内容需要调用后端接口进行数据返回 现在新增的时候 数据已经返回了 但是再修改的时候 进行回显数据导致前端列表中展示出来的数字 不是我们想要的 我们想要的是回显成
  • react学习笔记之三--State

    State概述 state可以理解成vue中的data 没学过vue也不要紧 就相当于设置一个页面的全局变量 设置的同时也要设置setter 这样就能实现更新state并重新渲染组件 定义的规则如下 const index setIndex
  • C/C++ 关于double和float两种类型的区别

    float 是单精度浮点数 内存占4个字节 有效数字8位 表示范围是 3 40E 38 3 40E 38 double 是双精度浮点数 内存占8个字节 有效数字16位 表示范是 1 79E 308 1 79E 308 include
  • YOLOv5源码逐行超详细注释与解读(1)——项目目录结构解析

    前言 前面简单介绍了YOLOv5的网络结构和创新点 直通车 YOLO系列 YOLOv5超详细解读 网络详解 在接下来我们会进入到YOLOv5更深一步的学习 首先从源码解读开始 因为我是纯小白 刚开始下载完源码时真的一脸懵 所以就先从最基础的
  • 高级实战案例:Python反反爬之JavaScript混淆

    写在前面 很早之前在吾爱破解论坛上看见了 猿人学 Web端爬虫攻防大赛 当时进入他们官网的时候 比赛已经结束了 看着那些题目还挺有意思的 但由于各种原因一直没有机会去做那些题目 最近比较闲 就去把猿人学官网打开看了一下 尝试着完成了第一道题