背景

公司的大部分项目都是以用户名密码加滑块登录的,为了成功登录拿到 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
登录的时候传上这个距离就可以了


↙↙↙阅读原文可查看相关链接,并与作者交流