微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

selenium + tesseract + PIL识别验证码

前期准备

tesseract-OCR下载、配置及基本使用

  • 下载tesseract-OCR
下载地址:
	下载源:https://digi.bib.uni-mannheim.de/tesseract/
	根据自身硬件情况下载对应版本即可
  • 配置环境变量
1.将安装包直接一路安装
2.打开 计算机-->邮件-->高级系统设置-->环境变量 
	在 系统变量-Path中添加tesseract的安装路径
	新建系统变量
		变量名:TESSDATA_PREFIX
		值:D:\Tesseract-OCR\tessdata
		
验证是否配置成功,可使用cmd命令,如下结果即为成功

C:\XXX\XXX>tesseract --version
tesseract v5.0.0.20190623
 leptonica-1.78.0
  libgif 5.1.4 : libjpeg 8d (libjpeg-turbo 1.5.3) : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.11 : libwebp 0.6.1 : libopenjp2 2.3.0
 Found AVX2
 Found AVX
 Found SSE	 
  • tesseract的基本使用
1.打开cmd命令窗口
2.验证码提取的输入格式:tesseract 图片路径 输出文件(是个TXT文件)
	例:tesseract D:\待使用图片路径\image.png D:\待输出文件路径\result.txt
	注:图片格式支持JPG、png,其他格式没试过,不清楚
  • tesseract其他资料
https://github.com/tesseract-ocr/tessdoc

# 官方语言包下载地址,根据安装的版本选择对应的语言包
https://tesseract-ocr.github.io/tessdoc/Data-Files
# 下载完成后,直接放到安装位置的tessdata文件夹下即可

Python安装PyTesseract

  • 本人使用的pycharm,以pycharm为例
    • File–>Settings for New Projects–>Project Interpreter–>右上角"+"
    • 在弹出的搜索框中搜索PyTesseract,搜索出结果后可点击下方install package进行安装,认安装最高版本,可通过选中Specify version后进行历史版本选择


      在这里插入图片描述

开始操作

  • 开始前准备工作–确认当前电脑系统的显示比例
    • 可通过 设置-显示 进行查看当前的显示比例
    • 分辨率是否有影响暂时不明

      在这里插入图片描述

  • 代码实现
from selenium import webdriver
from PIL import Image  # PIL:Python Imaging Library,Python图像处理标准库
import PyTesseract  # tesseract-OCR:开源识别框架
import time

if __name__ == '__main__':
    driver = webdriver.Chrome()  # 加载浏览器驱动
    driver.maximize_window()  # 设置浏览器窗口为全屏
    driver.get(url)  # 网址
	time.sleep(3)
	driver.save_screenshot('D:\\Study\\img\\printscreen.png')  # 全屏截图及存放路径
    imgelement = driver.find_element_by_xpath('xpath')  # 定位元素位置
    location = imgelement.location  # 获取验证码x,y坐标
    size = imgelement.size  # 获取验证码高宽
    # 计算验证码的上下左右位置,此处需要确认下电脑显示的缩放比例,即开始前准备工作中所查信息
    # 若未乘以相对显示比例系数,则认为*1.00,代码与实际比例不相对时,其定位结果会不准确
	left = location['x']*1.25  # 计算左边界
	top = location['y']*1.25   # 计算上边界
	right = (location['x'] + size['width'])*1.25     # 计算右边界
	botom = (location['y'] + size['height'])*1.25    # 计算下边界
	# 将上下左右边界值放到元祖中(注意顺序:左 上 右  下)
	local = (left, top, right, botom)
	
	i = Image.open("D:\\Study\\img\\printscreen.png")  # 打开截图
    result = i.crop(local)  # 使用Image的crop函数,从截图中再次截取我们需要的区域
    result = result.convert('RGB')
    result.save('D:\\Study\\img\\save.jpg')  # 保存我们接下来的验证码图片 进行打码

    text = PyTesseract.image_to_string(Image.open('D:\\Study\\img\\save.jpg'))
    print(text)  # 此处即以文本形式打印出识别后的验证码
    
	driver.find_element_by_xpath('xpath').send_keys(text)  # 输入验证码
	# 注意事项
	# tesseract识别出来的字符串可能需要截取一下才能用
	# 识别精准率还不错,即使失败,多尝试几次即可
	# 我所截取的为简易的 字母 + 数字 验证码
	# 若要识别含有中文的验证码,需要下载相应的语言包
  • 参考文章及资料
    http://www.manongjc.com/detail/6-qexgtqevkuctzzh.html
    https://blog.csdn.net/qq_42278240/article/details/90573652
    感谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐