光学文字识别主要应用于文字验证码、滑块等类型的登录验证。
首先需要的是第三方库 easyocr(有点大1.5G左右)。
安装导入后使用:
reader = easyocr.Reader(['ch_sim','en'],gpu = False) print(reader.readtext('file/IDcard.jpg',detail = 0))
列表中参数表示可识别文字语言种类。***‘ch_sim’ - 简体中文 ‘en’ - 英文***
导包
from PIL import Image as img from PIL.Image import Image # from PIL.ImageFilter import Filter #使用滤镜处理图片
image = img.open('file/IDcard.jpg') #type:Image 声明类型为了有代码提示 print(image.size) #图片大小 head = image.crop((320,50,460,235)) #抠图裁剪位置 # head.show() #显示图片 head.save('file/head.jpg') #保存图片
抠图前:
抠图后:
这个邮箱页面登录框嵌套了两次,所以需要获取两次iframe标签以切换到到登录框获取到输入框以及验证码。
切换到登录框
iframe = browser.find_element_by_css_selector('.login_panel_iframe') browser.switch_to.frame(iframe)
切换到邮箱登录
iframe_mail = browser.find_element_by_css_selector('#ding-login-iframe') browser.switch_to.frame(iframe_mail)
现在就可以获取到输入框了,解析现在的网页就可以拿到输入框了。输入用户名密码后才会显示验证码。验证码位置就是登录框、邮箱登录框、验证码框三者横纵坐标的和(因为他们之间都是相对位置)。通过location获取到的位置都是左上角的坐标。再通过size获取到验证码大小就可以对截到的整个图进行裁剪工作了。
屏幕截图:
存为文件:
browser.get_screenshot_as_file('file/aliyun.png')
截取整个窗口的图片获得二进制数据
image_data = browser.get_screenshot_as_png() browser_image = Image.open(io.BytesIO(image_data))
最后裁剪就能得到完整的验证码了。值得注意的是,windows系统需要将电脑页面设置为100%(默认为125%),若不修改需要在裁剪坐标处乘1.25(125%)、或乘1.5(150%)。