关于滑动验证码的处理

最近好些朋友询问滑动验证码的问题,这里简单写个案例,希望对大家有所帮助

关于滑动验证码的处理

未进行容错处理的流程图,仅供参考:
关于滑动验证码的处理

1、获取验证码图片基于桌面的位置

使用【获取元素位置】组件,拾取验证码图片,参数中的“位置”设置为“左上”,就可以得到验证码左上角的坐标 (x1,y1):

关于滑动验证码的处理

【获取元素位置】组件返回值的前两个数字代表了所设置位置的坐标,后两位是所拾取对象的长宽。

2、获取滑块基于桌面的位置

再次使用【获取元素位置】组件,拾取滑块,参数“位置”默认为“中间”,获取滑块的坐标(x2,y2):

关于滑动验证码的处理

3、获取验证码图片中的目标缺口基于图片左上角的坐标

使用截图组件,截取验证码图片,将返回值——图片保存在本地的路径——传入【验证码】组件进行识别,获取验证码中的缺口基于图片的坐标(x3,y3):

关于滑动验证码的处理

这里需要注意,验证码组件可能返回的不是一个坐标,可能将待补全的缺口图片和目标缺口的坐标都返回,所以接下来需要多验证码返回的值进行处理判断。

4、判断返回值的坐标个数

使用正则表达式,匹配【验证码】组件的返回值 lv_3,获取 lv_3 中的坐标:

import re
lv_3=re.findall(r'\d+,\d+',lv_3)  #此时lv_3是元素为字符串的列表,字符串是坐标

如果 lv_3 的长度为 1,返回的就是一个坐标

此处为方便操作,默认返回的坐标为 1 个或 2 个这两种情况,没有进行容错,大家在正式的流程设计中需要注意。

5、计算拖动滑块的最终坐标

  • 验证码返回的坐标为 1 个的情况
    将这个坐标的字符串转换为列表:
lv_3=lv_3[0].split(',')  #此时lv_3是元素为字符串的列表,且元素个数为2,分别对应x坐标和y坐标

这样便可得到拖动的目标坐标 (lv_1[0]+int(lv_3[0]),lv_2[1])

  • 验证码返回的坐标为 2 个的情况
    将这个坐标的字符串转换为列表:
lv_3=lv_3[1].split(',')  #为图方便,默认了第二个坐标为目标缺口的坐标,一般情况下是对的,但在实际的流程设计中,请读者自行容错

这样便可得到拖动的目标坐标 (lv_1[0]+int(lv_3[0]),lv_2[1])

关于滑动验证码的处理