问题背景
以 中国邮政速递物流网 中的滑块验证码为例:
如上图滑块可拖动范围和拼图可移动范围并不相等,且该滑块验证码不能直接拖动拼图本身,如果直接将验证码的识别结果作为滑块的拖动距离会导致成功率极低,此时两者之间可能会有一个官方的偏移系数,需要找到系数并算出实际的滑块拖动距离。(若实在无从查找,只能自行预估并反复测试)
偏移系数查找思路
看到滑块元素不是一个普通的图片元素,而是由 canvas 绘制的,找到控制绘制的 js 代码
可以看到滑块上绑定有一个鼠标移动的事件,点进去
我们看到下面这段 js
打个断点大致分析一下代码,可以看出变量i是下方滑块被拖动的 X 轴像素,而被乘上的(t.w - 40 - 20) / (t.w - 40)
应该就是偏移系数了,然后再分析一下这个系数,其中的t.w
就是canvas画布的宽度350,至此就知道偏移系数的计算公式了
根据公式简单优化一下拖动的距离x,x = x / ((画布宽度 - 40 - 20) / (画布宽度 - 40))
,大功告成