接口测试 接口滑块登录

Kevin.zhao · 2023年03月02日 · 最后由 孤千羽 回复于 2023年03月23日 · 5516 次阅读

背景

公司的大部分项目都是以用户名密码加滑块登录的,为了成功登录拿到 token 必须解决滑块登录的问题

解决办法

通过抓包发现,是登录的时候传一个距离的参数,如图就是足球和空白位置的距离,只要算出这个距离在登录的时候传过去就可以了

这里就需要用要用的 cv2 了
pip install opencv-python 安装 cv2

首先 把两张图片先保存到本地
接下来要对这两张图片进行灰度处理
处理前的

处理后的

处理完成之后就开始算距离

def get_distance(bg,tp):
    '''
    bg: 背景图片
    tp: 缺口图片
    '''
    # 读取背景图片和缺口图片
    bg_img = cv2.imread(bg) # 背景图片
    tp_img = cv2.imread(tp) # 缺口图片

    # 识别图片边缘
    bg_edge = cv2.Canny(bg_img, 100, 200)
    tp_edge = cv2.Canny(tp_img, 100, 200)

    # 转换图片格式
    bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB)
    tp_pic = cv2.cvtColor(tp_edge, cv2.COLOR_GRAY2RGB)

    # 缺口匹配
    res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) # 寻找最优匹配

    # 绘制方框
    th, tw = tp_pic.shape[:2]
    tl = max_loc # 左上角点的坐标
    # br = (tl[0]+tw,tl[1]+th) # 右下角点的坐标
    # cv2.rectangle(bg_img, tl, br, (0, 0, 255), 2) # 绘制矩形
    # cv2.imwrite('./file/a.jpg', bg_img) # 保存在本地
    # 返回缺口的X坐标
    return tl[0]+16

算出的结果可能会有一点点偏差,可能是图片的白边没算对,手动加上 16
登录的时候传上这个距离就可以了

最佳回复

目前验证码类型太多了,可以根据不同的类型选择不同发方式,滑块验证可以采用你说的这种方法来获取滑动距离,准确率还是挺高的,还有一种方法就是 4 楼大佬说的跟开发拿到 redis 的 key 去获取滑动距离结果,还有一种看开发有没有加日志打印滑动距离结果,直接从日志获取结果,总的来说,如果是做业务类的自动化,那搭建一个自动化测试环境,让开发配合取消滑动验证是成本最小的方式了。

共收到 6 条回复 时间 点赞

这几年新一点的滑块验证码都不是这种了,图片是打乱的几十张小图片组合出来的,并且还有多个空白填充处,完全不知道怎么绕😢

那只能把开发打一顿了😁 😁 😁

验证码类型太多了,慢慢总结

了解到你们开发设置的滑块验证的逻辑,是获取了返回值,还是把结果存到了 redis,然后通过连接 redis 手动添加 key,就能绕过验证码。或者让开发直接取消

ZW 回复

学到了,感谢大佬

目前验证码类型太多了,可以根据不同的类型选择不同发方式,滑块验证可以采用你说的这种方法来获取滑动距离,准确率还是挺高的,还有一种方法就是 4 楼大佬说的跟开发拿到 redis 的 key 去获取滑动距离结果,还有一种看开发有没有加日志打印滑动距离结果,直接从日志获取结果,总的来说,如果是做业务类的自动化,那搭建一个自动化测试环境,让开发配合取消滑动验证是成本最小的方式了。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册