缺口距离算出来 148 像素,实际是 155,拖动后提示「验证失败,请重试」,把轨迹改成模拟手抖仍然失败,接口返回 risk=1。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,缺口定位用固定阈值模板匹配,背景有渐变时边界会偏。轨迹只做了加减速,缺少真实鼠标的横向抖动和回拉,风控模型直接判机器。
「滑块验证码轨迹」这类改动最怕改一半,回滚脚本先准备好,再动生产。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
import cv2
tpl = cv2.imread('gap.png', 0)
res = cv2.matchTemplate(bg, tpl, cv2.TM_CCOEFF_NORMED)
print(cv2.minMaxLoc(res)[3][0])
权限不要一口气开到最大,先加到够用再往上试,范围小才好收。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
具体做法是,用 Canny 加模板匹配重新校准缺口距离;轨迹做加减速并插入随机停顿;末段微调并回拉 2 到 3 像素;单张图失败两次就换图不硬试。
最后用这个标准收尾,校准后距离误差在 2 像素内,连续 10 次验证通过 9 次,risk 稳定为 0。
