由于CSDN牛皮藓太多弃用搬一点以前的内容过来。滑块验证码同样是常见的反爬的手段, 并且在网上介绍的相关作品许多, 然而大多数都是在都能够取得原图以及有缺漏的图, 接着采取点对点的对照来得到缺漏所在的维度, 这里关键性的是怎样处置毫无原图的情况。# 1、例子B站QQ系。B站会把照片予以打乱, 然而能够反向组合从而形成两张照片, 或者直接进行截图也是可行的。不过QQ系, 是不存在原图的。**1**、B站**2**、QQ# 2、解决思路1、尽管他们不存在原图, 然而它的缺口部位存在白边, 所以针对每一个点, 于其右侧以及下侧各处对26个像素展开求和操作, 接着这些像素朝着右下方向移动一个像素进而再次求和, 一旦达成阈值便判定为图像的左上角点阈值分别是35000/15000。这次的检测的位置就是下图左上角那一个点。2、点位置被判断出来后就变得简单了, 而后剩下的便是缩放比例, 要运用控制移动滑块抵达缺口位置。还在此增添一个功能, 即把对应的照片以及计算得出的距离存到本地文件, 每次都先要凭借照片的文件名去查找是否计算过, 没计算的才会去调用这个匹配查找算法。3、制造移动滑块, 使其抵达缺口位置的这个部分, 通常情况下, 都是先进行加速, 之后再进行减速, 而见过测试显示, 代码参数达成百分百成功。# 3、工具主要使用、包# 4、代码# 匹配算法 def getImgDistance(name): imgImage.open(f./easygo/image/{name}.jpg) _breakFalse for i in range(400, img.size[0]-45): if _break: break for j in range(img.size[1]-45): #s为白边总和s2为白边之内灰色总和 s0 s20 for m in range(1,26): sssum(img.getpixel((i,jm)))sum(img.getpixel((im,j))) s2s2sum(img.getpixel((i1,jm)))sum(img.getpixel((im,j1))) #阈值为测试结果 if s35000 and s215000: #调试代码 # box(i,j,i28,j28) # regionimg1.crop(box) # plt.figure() # plt.imshow(region) # print(i,j) _breakTrue break saveDistance(name,i-1) return i-1 def getTracks(distance): # 先均加速后均减速模拟 tracks [] offset 0 turn_dis distance * 4 / 5 t 0.4 v 0 while offset distance: if offset turn_dis: a 2 else: a -3 v0 v v v0 a * t move_dis v0 * t 1 / 2 * a * t * t offset move_dis # print(move_dis) tracks.append(round(move_dis)) return tracks