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