T14第二代验证码
一:接口分析
翻页后会生成一个滑动验证码,滑动滑块正确滑过后会展示新页面,请求api返回值中,overlay为背景图,masked为缺口图片

滑动当前滑块,查看滑块请求

发现container_height、container_width为固定值,distance为滑动距离,那么思路就来了
请求captcha_image获得图片文件,然后计算得到滑动距离distance,请求即可
二:编码
识别距离的这种代码,可以直接丢给AI帮忙编写,但是需要注意的是接口返回的图片是840*540的


而验证的时候的大小是400*240的,涉及到一个缩放
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| def calculate_slider_distance(bg_path, slider_path, real_width=840, display_width=400): """ 计算滑块距离
:param bg_path: 背景图 :param slider_path: 滑块图 :param real_width: 原图宽度 :param display_width: 页面显示宽度 :return: real_distance: 原图真实距离 display_distance: 页面应滑动距离 """
# 读取图片 bg = cv2.imread(bg_path) slider = cv2.imread(slider_path)
# 转灰度 bg_gray = cv2.cvtColor(bg, cv2.COLOR_BGR2GRAY) slider_gray = cv2.cvtColor(slider, cv2.COLOR_BGR2GRAY)
# 边缘检测 bg_edge = cv2.Canny(bg_gray, 100, 200) slider_edge = cv2.Canny(slider_gray, 100, 200)
# 模板匹配 result = cv2.matchTemplate( bg_edge, slider_edge, cv2.TM_CCOEFF_NORMED )
# 获取最佳位置 _, max_val, _, max_loc = cv2.minMaxLoc(result)
x = max_loc[0]
# 缩放比例 scale = display_width / real_width
# 页面实际滑动距离 display_distance = x * scale
return x, display_distance, max_val
def get_dis(): bg_path = "bg.png" slider_path = "slider.png" real_x, move_x, score = calculate_slider_distance( bg_path, slider_path ) return int(move_x)
|

此代码准确率还行,100次请求只重试了2次

更多内容也在公众号更新:码字的秃猴
