python滑动验证,极验滑块识别

  python滑动验证,极验滑块识别

  表tr td背景颜色=橙色本文仅供学习交流使用,如侵立删!/td /tr /table

  记一次极验滑块验证分析并通过操作环境win10、MAC python 3.9硒、硒线分析最近在做的一个项目登录时会触发一个滑块验证,就长下面这个样子

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

  直接提示被怪物吃掉了!

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

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

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

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

  定义打开(自身):

  登录模块

  # 定位密码登录

  自我。司机。find _ element _ by _ XPath(//*[@ id= app ]/div/div/div/div[1]/div[2]).单击()

  # 输入账号

  用户名=123456

  自我。司机。find _ element _ by _ XPath(//*[@ id= app ]/div/div/div/div[2]/div[1]/form/div[1]/div/div/input ).发送键(用户名)

  时间。睡眠(1)

  # 输入密码

  密码=123456789

  自我。司机。find _ element _ by _ XPath(//*[@ id= app ]/div/div/div/div[2]/div[1]/form/div[2]/div/div/input ).发送键(密码)

  时间。睡眠(1)

  # 登录

  自我。司机。find _ element _ by _ XPath(//*[@ id= app ]/div/div/div/div[2]/div[3]/button ).单击()

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

  def获取图像(自身):

  获取验证码图片

  :返回:图片的位置信息

  # 带缺口图片,使用射流研究…定位并读取图片的数据信息数据:image/png;base64,直接调用识别缺口

  全GB=自己。司机。execute _ script(返回文档。getelementsbyclassname( geetest _ canvas _ BG geetest _ absolute))[0].toda aurl( image/png ))

  # 完整图片,使用射流研究…定位并读取图片的数据信息数据:image/png;base64,直接调用识别缺口

  BG=自我。司机。execute _ script(返回文档。getelementsbyclassname( geetest _ canvas _ fullbg geetest _ fade geetest _ absolute )[0].toda aurl( image/png ))

  返回bg,全gb

  def get_decode_image(self,location_list):

  解码图片的base64数据

  # 提取图片base64数据

  _,img=location_list.split(,)

  # 数据转换为字节字节

  img=base64。解码字节(img。encode())

  # 读取图片

  new_im: PngImagePlugin .PngImageFile=image。打开(字节数(img))

  # new_im.convert(RGB )

  # new_im.save(文件名)

  返回新消息

  def compute_gap(self,img1,img2):

  计算缺口偏移这种方式成功率很高

  # 将图片修改为RGB模式

  img1=img1.convert(RGB )

  img2=img2.convert(RGB )

  # 计算差值

  diff=图像分割。差异(img 1、img2)

  # 灰度图

  diff=diff.convert(L )

  # 二值化

  diff=diff.point(self.table," 1 ")

  左=43

  对于范围内的w(左,不同大小[0]):

  lis=[]

  对于范围内的h(不同大小[1]):

  if diff.load()[w,h]==1:

  清单。追加(w)

  如果镜头(列表)5:

  返回w

  生成滑动轨迹

  定义获取跟踪(自身、距离、秒、ease_func):

  :参数距离:缺口位置

  :参数秒:时间

  :param ease_func:生成函数

  :返回:轨迹数组

  曲目=[0]

  偏移量=[0]

  对于阿兰格中的t(0.0,秒,0.1):

  缓和=缓和_函数

  offset=round(缓和(吨/秒)*距离)

  足迹。append(偏移量-偏移量[-1])

  offsets.append(偏移量)

  返回轨道

  定义移动间隙(自身,跟踪):

  滑动滑块

  打印(第一步,点击滑动按钮)

  滑块=自我。等等。直到(EC。element _ located的存在性(.CLASS_NAME, geetest_slider_button )))

  动作链(自动驾驶).点击并按住(滑块)。执行()

  时间。睡眠(1)

  打印(第二步,拖动元素)

  对于轨道中的轨道:

  动作链(自动驾驶).move_by_offset(xoffset=track,yoffset=0).执行()#鼠标移动到距离当前位置(x,y)

  时间。睡眠(0.0001)

  完美解决

  表tr td背景颜色=橙色本文仅供学习交流使用,如侵立删!/td /tr /table

  原创作品出自拉灯的

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: