登录网页的时候,很多时候都是需要输入验证码登录,如:
下面我从自己学习获取验证码时遇到的坑开始说起:
from PIL import Image
from selenium import webdriver
import pytesseract
from selenium.webdriver.common.by import By
# Chrome浏览器
driver = webdriver.Chrome()
driver.get('https://sms.danmi.com/login.html')
driver.maximize_window() # 放大窗口
driver.save_screenshot('D:/image.png')
code_img = driver.find_element(By.XPATH, '//*[@id="code-img"]') # 定位到验证码元素
# 获取验证码元素的定位,坐标为左上角的点
print(code_img.location) # {'x': 1139, 'y': 366}
# 我的电脑分辨率125%
k = 1.25
left = code_img.location['x'] * k
top = code_img.location['y'] * k
right = code_img.size['width'] * k + left
height = code_img.size['height'] * k + top
img = Image.open('D:/image.png')
newImg = img.crop((left, top, right, height))
newImg.save('D:/image1.png')
print(pytesseract.image_to_string(newImg, lang='chi_sim')) # 规则的验证码是可以打印出来的,如果是不规则的需要调用一些第三方的api
driver.quit()
1、首先安装图像处理的库,cmd打开任务管理器,输入下面命令,下面是我在Bito中获取到的解释,这个插件真的好用
pip install Pillow
我已经安装好了,所以提示如下:
Pillow
是 Python Imaging Library (PIL) 的一个分支,也是一个图像处理库。它可以让 Python 程序方便地处理各种图片格式,包括打开、创建、修改和保存图片,并且提供了一系列强大的图像处理功能(比如尺寸调整、裁剪、旋转、滤镜等),可以大大简化图片处理的操作。 pip install Pillow
是用于安装该库的命令。安装后,你就可以在 Python 代码中导入 Pillow
模块,并调用其中的函数来进行图片处理操作了。
2、安装图像识别库,同样在任务管理器中输入以下命令
pip install pytesseract
pytesseract
是一个基于 Tesseract-OCR 引擎的 Python 图像识别库,支持多种操作系统,并且可以识别多种语言的文字。在使用该库前,需要安装 Tesseract OCR 引擎并添加到系统环境变量中,同时也需要安装 pytesseract
库。 pip install pytesseract
是用于安装 pytesseract
库的命令。安装后,你可以在 Python 代码中使用 pytesseract
来识别图片中的文字,并将其转换为字符串。
我安装了之后,一直报错,报错信息如下,原来是因为我没有安装Tesseract-OCR导致的
pytesseract.pytesseract.TesseractNotFoundError:
tesseract is not installed or it's not in your PATH. See README file for more information.
下载地址:https://digi.bib.uni-mannheim.de/tesseract/
安装完成后,pytesseract
就能正常使用了
下载完安装包后,需要在环境变量的PATH中添加安装路径
3、然后遇到的一个问题就是,我裁的验证码总是错位,最后还是男朋友替我找到解决办法,因为img.crop()方法是按照电脑100%缩放定位的,我电脑是125%,所以总是截不对位置
解决办法 1:把电脑分辨率调至100%
2:将img.crop()的四个参数都乘以缩放比例
由于100%太丑了,界面用不起习惯,所以笔记中的代码用的是方法2
4、最后就是下面这个方法,只能识别到规则的验证码图片,遇到一些不规则的图像时,需要调用第三方api来解决(大概率要花钱)
pytesseract.image_to_string(newImg, lang='chi_sim')