关于滑动验证码的处理
最近好些朋友询问滑动验证码的问题,这里简单写个案例,希望对大家有所帮助
未进行容错处理的流程图,仅供参考:
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])
很强不错,收藏了
nb 了,为了做滑动验证码教程,还专门找了腾讯验证码
您好,我想问您下 我做了一个简单的获取元素位置的组件 我定义了流程变量 想在控制台输出
为啥会报错 提示 type() takes 1 or 3 arguments
https://ssl.captcha.qq.com/cap_union_new_showaid=522005705&asig=&captype=&protocol=https&clientype=2&d
辛苦了;