我看了一篇关于如何破解豆瓣滑动验证码的博客后,跟着敲了一遍,然后其实我一开始是想破解知乎的滑动验证码的,然后找到的是豆瓣的,我想都是滑动验证码,就敲了豆瓣的。
这是他的链接
然后我想用他这个方法破解知乎的验证码,却一直出错,后来我知道了原因。
这是豆瓣的十张验证码图片,本来是十张的,但是我发现很多重复的,去掉重复的就这几张。
用他那个检测轮廓算周长面积的方法。
再看看知乎的验证码
知乎的图片非常复杂,简单的算周长和面积没用,下面是那个前面链接博主的代码。
for contour in contours: # contourArea方法用于计算轮廓的面积 area = cv2.contourArea(contour) # arcLength方法用于计算轮廓的周长或弧长 length = cv2.arcLength(contour, True) print('5') # print(area,length) # 如果检测区域面积在5025-7225之间,周长在300-380之间,则是目标区域 if 4900 < area < 6400 and 280 < length < 320: # 计算轮廓的边界矩形,得到坐标和宽高 # x, y: 边界矩形左上角点的坐标。 # w, h: 边界矩形的宽度和高度。 x, y, w, h = cv2.boundingRect(contour) print("计算出目标区域的坐标及宽高:", x, y, w, h) # 在目标区域上画一个红框看看效果 print('6') cv2.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2) cv2.imwrite("222.jpg", image) print('7') return x
因为opencv根本找不到这个碎片的轮廓,所以上面的代码是行不通的。
我能说什么呢,豆瓣啊,你真是太好了,你就好像故意给爬虫新手练手似的。