本文仅供学习交流使用,如侵立删!

记一次 极验滑块验证分析并通过

操作环境

  • win10 、 mac
  • Python3.9
  • selenium、seleniumwire

分析

最近在做的一个项目登录时会触发一个滑块验证,就长下面这个样子



可以很明显的看出来是极验3代验证,借助之前写阿里云盾的经验使用selenium+pyautoui先测试一下,详细可参考:阿里云盾滑块验证



直接提示被怪物吃掉了!!!

还是先来研究一下官方文档看一下验证的业务逻辑:极验验证接入文档



本以为是检测到了selenium,手动测试了一下发现是可以滑过的,那就是说明应该是滑动的轨迹触发了风控。

分析了一波效验规则及原理,搞明白原理就好办了

解决方案

使用selenium请求url,并触发滑块验证

  1. def open(self):
  2. """
  3. 登录模块
  4. """
  5. # 定位密码登录
  6. self.driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div/div/div[1]/div[2]').click()
  7. # 输入账号
  8. username = '123456'
  9. self.driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div/div/div[2]/div[1]/form/div[1]/div/div/input').send_keys(username)
  10. time.sleep(1)
  11. # 输入密码
  12. password = '123456789'
  13. self.driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div/div/div[2]/div[1]/form/div[2]/div/div/input').send_keys(password)
  14. time.sleep(1)
  15. # 登录
  16. self.driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div/div/div[2]/div[3]/button').click()

获取验证图片并计算滑块距离

  1. def get_images(self):
  2. """
  3. 获取验证码图片
  4. :return: 图片的location信息
  5. """
  6. # 带缺口图片,使用js定位并读取图片的data信息 data:image/png;base64,直接调用识别缺口
  7. fullgb = self.driver.execute_script('return document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].toDataURL("image/png")')
  8. # 完整图片,使用js定位并读取图片的data信息 data:image/png;base64,直接调用识别缺口
  9. bg = self.driver.execute_script('return document.getElementsByClassName("geetest_canvas_fullbg geetest_fade geetest_absolute")[0].toDataURL("image/png")')
  10. return bg, fullgb
  11. def get_decode_image(self, location_list):
  12. """
  13. 解码图片的base64数据
  14. """
  15. # 提取图片base64数据
  16. _, img = location_list.split(",")
  17. # 数据转换为Bytes字节
  18. img = base64.decodebytes(img.encode())
  19. # 读取图片
  20. new_im: PngImagePlugin.PngImageFile = image.open(BytesIO(img))
  21. # new_im.convert("RGB")
  22. # new_im.save(filename)
  23. return new_im
  24. def compute_gap(self, img1, img2):
  25. """
  26. 计算缺口偏移 这种方式成功率很高
  27. """
  28. # 将图片修改为RGB模式
  29. img1 = img1.convert("RGB")
  30. img2 = img2.convert("RGB")
  31. # 计算差值
  32. diff = ImageChops.difference(img1, img2)
  33. # 灰度图
  34. diff = diff.convert("L")
  35. # 二值化
  36. diff = diff.point(self.table, '1')
  37. left = 43
  38. for w in range(left, diff.size[0]):
  39. lis = []
  40. for h in range(diff.size[1]):
  41. if diff.load()[w, h] == 1:
  42. lis.append(w)
  43. if len(lis) > 5:
  44. return w

生成滑动轨迹

  1. def get_tracks(self, distance, seconds, ease_func):
  2. """
  3. :param distance: 缺口位置
  4. :param seconds: 时间
  5. :param ease_func: 生成函数
  6. :return: 轨迹数组
  7. """
  8. tracks = [0]
  9. offsets = [0]
  10. for t in np.arange(0.0, seconds, 0.1):
  11. ease = ease_func
  12. offset = round(ease(t / seconds) * distance)
  13. tracks.append(offset - offsets[-1])
  14. offsets.append(offset)
  15. return tracks

滑动模块

  1. def move_to_gap(self, track):
  2. """滑动滑块"""
  3. print('第一步,点击滑动按钮')
  4. slider = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'geetest_slider_button')))
  5. ActionChains(self.driver).click_and_hold(slider).perform()
  6. time.sleep(1)
  7. print('第二步,拖动元素')
  8. for track in track:
  9. ActionChains(self.driver).move_by_offset(xoffset=track, yoffset=0).perform() # 鼠标移动到距离当前位置(x,y)
  10. time.sleep(0.0001)

效果

完美解决


资源下载

https://download.csdn.net/download/qq_38154948/85328666


本文仅供学习交流使用,如侵立删!

【原创】Python 极验滑块验证的更多相关文章

  1. Vue(7)- vue-cookies、极验滑动验证geetest、vue-router的导航守卫

    一.vue-cookies 参考文档简书:https://www.jianshu.com/p/535b53989b39 参考文档npm:https://www.npmjs.com/package/vu ...

  2. vue-cookies、极验滑动验证geetest、vue-router的导航守卫

    一 . vue-cookies 参考文档简书:https://www.jianshu.com/p/535b53989b39 参考文档npm:https://www.npmjs.com/package/ ...

  3. 基于form表单的极验滑动验证小案例

    01.目录展示 02.url.py urlpatterns = [ path('admin/', admin.site.urls), path('login/',views.login), path( ...

  4. php+js实现极验滑块拖动验证码-tncode

    先上图: 演示地址:http://aso.39gs.com/tncode/index.html 相信在淘宝,斗鱼这些大网站都见到过这样的验证码了,拖动验证码比传统在移动端有更好的化验,减少用户的输入. ...

  5. 【原创】Python 网易易盾滑块验证

    本文仅供学习交流使用,如侵立删! 记一次 网易易盾滑块验证分析并通过 操作环境 win10 . mac Python3.9 selenium.PIL.numpy.scipy.matplotlib 分析 ...

  6. selenium滑块验证

    使用selenium模拟登录解决滑块验证问题   本次主要是使用selenium模拟登录网页端的TX新闻,本来最开始是模拟请求的,但是某一天突然发现,部分账号需要经过滑块验证才能正常登录,如果还是模拟 ...

  7. python+selenium破解极验验证登录

    1.前言: 目前很多网站会在正常的账号密码认证之外加一些验证码,以此来明确区分人/机行为,最典型的就是极验滑动验证.(如下图) 这里我们以简单实例说明如何实现自动校验类似验证. 2.步骤: 1)点击验 ...

  8. php+js实现极验,拖动滑块验证码验证表单

    现在很多网站,比如淘宝,京东等都改用使用极验拖动验证码实现登录,这种方式比传统的验证码方式有更好的体验,减少用户输入的错误,也同样能起到防盗刷的功能.现在很多极验都是第三方的,也很多都是收费的.今天在 ...

  9. 在ASP.NET MVC项目中使用极验验证(geetest)

    时间 2016-03-02 18:22:37 smallerpig 原文  http://www.smallerpig.com/979.html 主题 ASP.NET MVC   geetest开发体 ...

随机推荐

  1. 一条更新SQL的内部执行及日志模块

    一条更新SQL的内部执行 学习MySQL实战45讲,非常推荐学 还是老图: 上文复习 在执行查询语句的时候,会执行连接器(总要连上才能搞事情),然后去查询缓存(MySQL8+删除了),有数据返回,没数 ...

  2. 【系统】查看windows系统是否永久激活

    查看windows系统是否永久激活 查看激活时间 slmgr.vbs -xpr 查看激活详情 slmgr.vbs -dlv

  3. 深度学习可视化工具--tensorboard的使用

    tensorboard的使用 官方文档 # writer.add_scalar() # 添加标量 """ Args: tag (string): Data identif ...

  4. vision transformer

    VIT 总览 Step1 Step2

  5. SmartIDE v0.1.17 已经发布 - 模版库远程模式和插件市场公测

    SmartIDE v0.1.17 已经发布,本次同步更新了CLI (Build 3332) 的稳定版通道和Server (Build 3333) 生产环境(内测中).请参考对应的 安装说明 获取最新版 ...

  6. JAVA - 缓冲和缓存

    JAVA - 缓冲和缓存 缓冲 Buffer 功能:协调上下层应用之间的性能差异.通过缓冲区的缓冲,当上层组件性能优于下层组件的时候,缓冲可以有效减少上层组件对下层组件的等待时间. 使用场景:IO流中 ...

  7. QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL

    QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL 课程1   C语言程序设计高级实用速成课程 基础+进阶+自学 课程2   C语言程序设计Windows GDI图形绘 ...

  8. BUUCTF-乌镇峰会种图

    乌镇峰会种图 16进制拖到底一看便知

  9. 细说GaussDB(DWS)复杂多样的资源负载管理手段

    摘要:对于如此多的管控功能,管控起来实际的效果到底如何,本篇文章就基于当前最新版本,进行效果实测,并进行一定的分析说明. 本文分享自华为云社区<GaussDB(DWS) 资源负载管理:并发管控以 ...

  10. 使用navicat连接远程linux mysql数据库出现10061

    重启mysql服务 两种方式 1.使用 service 启动:service mysql restart 2.使用 mysqld 脚本启动:/etc/inint.d/mysql restart