1、引言
小屌丝: 鱼哥,你说爬虫或者登录网页,最烦的是那个操作?
小鱼:图片验证码了。
小屌丝:确实是的,那有没有什么办法,能破解这种繁琐的验证呢?
小鱼:方法嘛,有啊,例如:cookie啊,或者利用第三方库啊
小屌丝:真的有第三方库,可以解决这个问题?
小鱼:对啊,很方便的,
小屌丝:演示一下如何?
小鱼:怎么突然点饿了 ~
小屌丝:我懂我懂, 你分享完,咱们泡澡去~
2、 ddddocr
2.1 介绍
验证码,复杂一点的有滑块验证码,点选文章和点选图片验证码。这些都是爬虫和WebUI自动化测试中中的老大难问题,今天介绍一款通用验证码识别 SDK 对他们彻底说拜拜,它的名字是 ddddocr 带带弟弟 OCR 通用验证码识别 SDK 免费开源版。
2.2 安装
老规矩,在使用前,必须要安装。
安装方式逃不了 pip方式:
pip install ddddocr
其他方式安装:
《Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!》
《Python3:我低调的只用一行代码,就导入Python所有库!!》
2.3 使用
2.3.1 滑块验证码
滑块验证码这里用的是豆瓣的滑块验证。下滑块是单独的透明背景图 hycdn.png。
背景图是带小滑块坑位的 background.jpg。
上代码
# -*- coding:utf-8 -*- # @Time : 2022-03-06 # @Author : carl_DJ import ddddocr det = ddddocr.DdddOcr(det=False, ocr=False) with open('hycdn.png', 'rb') as f: target_bytes = f.read() with open('background.jpg', 'rb') as f: background_bytes = f.read() res = det.slide_match(target_bytes, background_bytes, simple_target=True) print(f"{res}")
运行结果:
{'target_y': 0, 'target': [486, 126, 622, 262]}
target 属性的前两个值正好和豆瓣验证滑块 url 中提交的 ans 差不多。
2.3.2 点选类验证码
点选类验证码
上代码
# -*- coding:utf-8 -*- # @Time : 2022-03-06 # @Author : carl_DJ import ddddocr det = ddddocr.DdddOcr(det=True) with open("eb.jpg", 'rb') as f: image = f.read() poses = det.detection(image) im = cv2.imread("eb.jpg") for box in poses: x1, y1, x2, y2 = box im = cv2.rectangle(im, (x1, y1), (x2, y2), color=(0, 0, 255), thickness=2) cv2.imwrite("result.jpg", im)
运行结果
2.3.3 字母数字验证码
字母数字验证码的图片来自于 google 搜索
上代码
# -*- coding:utf-8 -*- # @Time : 2022-03-06 # @Author : carl_DJ import ddddocr ocr = ddddocr.DdddOcr(old=True) with open("z1.jpg", 'rb') as f: image = f.read() res = ocr.classification(image) print(res)
运行结果
2wkc
3、总结
今天的分享,就到这里了。
奇奇怪怪的知识,是不是又增加了。
曾经编写WebUI自动化脚本,为了不在验证码识别大费周折,就让开发大佬把验证码给注释掉。
现在,有了ddddocr, 就再也不用麻烦开发大佬注释验证码了,
所以,
关注小鱼,学习更多关于python第三方库的知识。