selenium - 图形验证码
前言:用selenium做UI自动化,遇网站登录需要验证码!?WC...看了很多文章,最终解决不了我的需求,故做一下记录分享我的解决方法
1.主要思路:
①.通过元素定位验证码图片位置
②.使用screenshot方法将验证码截图
③.将图片亮度对比度调高提高识别精准度
④.使用ddddoc第三方库识别验证码
2.元素定位
复制xpath定位验证码图片并截图命名img.png
img=driver.find_element_by_xpath('//*[@id="login-form"]/div[4]/span') img.screenshot('E:\\captcha\\img.png')
3.提高亮度或对比度去除干扰因素
python中PIL模块中有一个叫做ImageEnhance的类,该类专门用于图像的增强处理,可以实现图像的亮度、对比度、色度和锐度四种方式的增强(或减弱)处理。
# -*- coding: UTF-8 -*- import os from PIL import Image from PIL import ImageEnhance import ddddocr # 原始图像 class ImageAugument(object): def __init__(self,img_name): image = Image.open('E:\\captcha\\'+img_name) self.Image = image.convert('L') #转化为灰色图像 # image.show() # 亮度增强 def Brightness_img(self): enh_bri = ImageEnhance.Brightness(self.Image ) brightness = 1.4 image_brightened = enh_bri.enhance(brightness) image_brightened.save('E:\\captcha\\aa.png') # 色度增强 def Color_img(self): enh_col = ImageEnhance.Color(self.Image ) color = 1.5 image_colored = enh_col.enhance(color) image_colored.save('E:\\captcha\\bb.png') # 对比度增强 def Contrast_img(self): enh_con = ImageEnhance.Contrast(self.Image ) contrast = 1.5 image_contrasted = enh_con.enhance(contrast) image_contrasted.save('E:\\captcha\\cc.png') # 锐度增强 def Sharpness_img(self): enh_sha = ImageEnhance.Sharpness(self.Image ) sharpness = 3.0 image_sharped = enh_sha.enhance(sharpness) image_sharped.save('E:\\captcha\\dd.png') # 亮度增强对比度增强 def Brightness_And_Contrast_img(self): enh_bri = ImageEnhance.Brightness(self.Image) brightness = 1.4 image_brightened = enh_bri.enhance(brightness) enh_con = ImageEnhance.Contrast(image_brightened) contrast = 1.5 image_contrasted = enh_con.enhance(contrast) image_contrasted.save('E:\\captcha\\Ee.png') if __name__ == '__main__': img_x = ImageAugument('img.png') img_x.Brightness_And_Contrast_img()
具体数值可以通过aa bb cc dd去查看哪张图验证码更清晰,参数可自行调整
4.使用第三方库识别图片中的验证码:
博猪最开始用:pillow
+pytesseract;
优点是免费,较为易用,但其识别精度一般。
但是!我发现了一个第三方库,该库名也是非常有趣 —— ddddocr(谐音带带弟弟OCR)
Github地址:https://github.com/sml2h3/ddddocr
环境要求:
python >= 3.8
Windows/Linux/Macox..
可以通过pip命令安装:pip install ddddocr -i https://pypi.douban.com/simple
以下是代码,五行识别验证码
import ddddocr ocr = ddddocr.DdddOcr() with open('1.png', 'rb') as f: img_bytes = f.read() res = ocr.classification(img_bytes) print(res)
作者:小林同学_Scorpio
本博客所有文章仅用于学习、分享和交流目的,欢迎非商业性质转载。
博主的文章没有高度、深度和广度,只是凑字数,做笔记。由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用参考、引用、抄袭、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个无耻的文档搬运工!