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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。