当前位置:网站首页 > 技术博客 > 正文

滑动验证码破解 python



🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快

现在出现了一种通过用户鼠标移动滑块来填补有缺口图片的验证码,我们叫做滑动验证码。

它的原理很简单,首先生成一张图片,然后随机挖去一块,在页面展示被挖去部分的图片,再通过js获取用户滑动距离,以及坐标等信息到后台进行校验。只要用户移动的距离符合,以及移动的轨迹行为检测通过即可视为验证通过。

解决思路

目前这种验证码的通用解决思路如下:

获取验证码图片,包含原图以及有缺口的图

算出缺口的位置,以及滑块要滑动的距离

通过算法模拟人工移动轨迹

通过selenium模拟操作

逻辑实现

我们以保温网为例:http://www.cnbaowen.net/api/geetest/。

获取验证码图片

注意我们需要获取两张图片,第一张是完整背景图,第二张是有缺口的背景图。

经过分析发现当鼠标位于按钮是上时显示完整背景图,当鼠标点击滑动按钮不松,显示有缺口的背景图。

根据之前学习的爬虫知识,图片一定是浏览器下载回来的,通过查看历史请求确实发现了图片

但是图片有点奇怪,仔细查看发现图片是被分块并有意随机拼接的。

根据以页面的css可以利用背景将图片拼接出来。我们当然可以依葫芦画瓢的利用PIL进行图片拼接,但是太麻烦了。

selenium有个方法可以对元素进行截图,先找到图片所在的html元素,然后利用selenium分别进行截图即可获取图片。代码如下:

完整图片:

 
  

有缺口图片:

 
  

计算移动距离

找出缺口位置,计算移动距离。算法有很多,大家可以自由发挥。这里我们讲一种最简单的方法。我们要算出的距离是滑块要滑动的距离。

通过比较没有缺口的图片,和这张有缺口的图片,找出滑块的位置和缺口的位置即可。

经过观察,发现滑块出现的位置固定在x轴的0-100像素范围内,所以循环比较两张图片的x轴0-100像素范围内的每一行像素点,直到找到第一行出现两个图片像素点颜色完全不同的点,即找到了滑块的最左边最上的第一个像素点。

但是在实际操作中发现,虽然肉眼看起来两张图片公共部分一模一样,但是程序处理后的像素的具体rgb值也是不相同的,所以需要设置一个阈值来判断,具体需要进行测试。

按照相同的思路,比较两张图片x轴100-end像素的部分,找到缺口的最左最上那个点。

用找到的缺口像素点的x坐标减去找到的滑块的点的x坐标得到近似移动距离。这种算法,经过测试准确率还不错,大家如果在实际工作过程中发现有问题,需要根据具体情况去设计不同算法。

代码如下:

 
  

计算滑动轨迹

滑动验证码早期刚面世的时候没有做行为校验,很快被激活成功教程。随着人工智能的发展,目前所有商用滑动验证码后台都有做行为校验,根据前端传递的移动轨迹,后台会进行特征校验,如果判定非人工则返回校验失败。模拟人的滑动行为,最常见的以中方法是通过加速度公式。

目前这个方法已经被识别,但相对较简单,我们首先学习其思路。大家根据自己的能力可以自行扩展。

基本思路是,分析手动的移动轨迹后发现,是先加速后减速,所以通过加速度公式进行如下的设计:

 
  

滑动滑块

利用selenium,根据算出的轨迹,进行模拟滑动,代码如下:

 
  

完整代码

 
  

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

版权声明


相关文章:

  • java接口简单例子2025-07-17 12:01:00
  • 在线客服聊天系统源码2025-07-17 12:01:00
  • vb二级证书有用吗2025-07-17 12:01:00
  • 设备iopq2025-07-17 12:01:00
  • python里jieba库怎么用2025-07-17 12:01:00
  • 单片机点亮一个灯程序c语言2025-07-17 12:01:00
  • 余弦相似性kmeans2025-07-17 12:01:00
  • redis download2025-07-17 12:01:00
  • 跳表实现排行榜2025-07-17 12:01:00
  • mysql安装错误代码25032025-07-17 12:01:00