当前位置: 首页 > news >正文

爬虫案例-亚马逊反爬分析-验证码突破(x-amz-captcha)

总体概览:核心主要是需要突破该网站的验证码,成功后会返回我们需要的参数后再去请求一个中间页(类似在后台注册一个session),最后需要注意一下 IP 是不能随意切换的

主要难点:

1、梳理整体反爬流程

2、验证码识别

3、IP识别

难度:三颗星(适合小白、初级跟中级学习)

目标网址:aHR0cHM6Ly93d3cuYW1hem9uLmNvbS9kcC9CMENTMjhaTFdT

备注:目前是有两套方案的(1、直接正面突破验证码 2、通过修改指纹来绕过验证码),本文先讲如何直接正面突破验证码,方案2后面有机会再讲

废话不多说,先上流程图

======= 正文开始 =======

首先打开浏览器自带的无痕模式,输入网址发现直接就弹出验证码了

打开抓包软件,尝试随机输入一个数字,我这里输入的是1,发现是明文,这就简单多了

搜索一下 amzn 与 amzn-r 发现这 amzn 很明显的是验证码的标识,field-keywords是我们输入验证码的结果

这次我们再输入正确的验证码:

发现对接口https://www.amazon.com/errors/validateCaptcha 进行请求,得到了

x-amz-captcha-1 与 x-amz-captcha-2 两个参数,同时会自动条状到我们最开始输入的那个产品详情页中。

在这个时候发现此时已经生成了大部分的参数了,但经过测试发现缺少 session-token 时,这几个ID很快就会被封掉不能继续使用。

接下来继续观察发现 session-token 在这个位置生成了出来,不难看出这个接口是疑似用来注册session-token 的,这里就是在开头说的请求一个中间页来注册一个session

携带这些参数再次请求的时候发现response已经没有cookie返回了,这个时候说明cookie的状态是比较好的,该网站有一个类似Cookie纠错的功能,当cookie没有特别满足他的要求的时候就会返回一些新的参数过来,此时我们只需要更新一下请求就可以了

最后需要注意一点就是 IP 是不能随意更换的,在生成x-amz-captcha-1 与 x-amz-captcha-2 这两个参数时的 IP 是绑定的,当IP更换了去请求就会失败,对比一下

同时,当再次使用那个IP时就会出现请求被拒绝,也就是被识别到为爬虫程序,被封禁

验证码识别部分:

最后还有一个 OE 文件 ,很明显的鼠标轨迹识别,非常有可能在后续会被用于反爬的识别

整体的思路到这基本上就结束了,后续可能会再写一遍如何实现同时实现高并发的稳定爬取该网站

有兴趣,需要源码的可以私聊我

相关文章:

  • QT截图程序,可多屏幕截图二,增加调整截图区域功能
  • NumPy和Matplotlib
  • jmeter多用户并发登录教程
  • LPDDR6带宽预计将翻倍增长:应对低功耗挑战与AI时代能源需求激增
  • 第四十七天 | 198.打家劫舍 213.打家劫舍|| 337.打家劫舍|||
  • 列表推导式(解析式)python
  • c++(一)
  • ozon卖家精灵,ozon卖家怎么使用
  • 动态规划part03 Day43
  • 西湖大学提出AIGC检测框架,精准识别AI撰写的文稿
  • 【图像处理与机器视觉】图像处理概述与像素
  • 《TCP/IP网络编程》(第十二章)I/O复用(2)
  • 如何找出真正的交易信号?Anzo Capital昂首资本总结7个
  • Vue3实战笔记(51)—Vue 3封装带均线的k线图
  • 微信小程序预览图片和H5使用canvas实现图片+蒙层+文字
  • 《Java编程思想》读书笔记-对象导论
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • DOM的那些事
  • java8 Stream Pipelines 浅析
  • jdbc就是这么简单
  • Linux CTF 逆向入门
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • PAT A1050
  • Python_网络编程
  • Python3爬取英雄联盟英雄皮肤大图
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • SOFAMosn配置模型
  • SpringBoot 实战 (三) | 配置文件详解
  • TypeScript迭代器
  • Vue学习第二天
  • 测试开发系类之接口自动化测试
  • 后端_MYSQL
  • 机器学习中为什么要做归一化normalization
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 如何进阶一名有竞争力的程序员?
  • 线性表及其算法(java实现)
  • 第二十章:异步和文件I/O.(二十三)
  • #Java第九次作业--输入输出流和文件操作
  • #mysql 8.0 踩坑日记
  • #前后端分离# 头条发布系统
  • #微信小程序:微信小程序常见的配置传值
  • $(selector).each()和$.each()的区别
  • (Python第六天)文件处理
  • (ZT)出版业改革:该死的死,该生的生
  • (二)c52学习之旅-简单了解单片机
  • (二)PySpark3:SparkSQL编程
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (论文阅读30/100)Convolutional Pose Machines
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)mysql使用Navicat 导出和导入数据库
  • ***测试-HTTP方法
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例