from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://124.223.30.31:xxxx/forum.php')
driver.find_element('id','ls_username').send_keys('admin')
driver.find_element('id','ls_password').send_keys('123456')
driver.find_element('css selector','.pn.vm').click()
sleep(2)
ele_pic =driver.find_element('css selector','[id^=vseccode_cS]>img') # webelement
ele_pic_bytes = ele_pic.screenshot_as_png # bytes
import ddddocr
ocr = ddddocr.DdddOcr(show_ad=False) # 得到一个ocr对象
code_text = ocr.classification(ele_pic_bytes) # 从bytes数据中提取 文本
driver.find_element('css selector','[id^=seccodeverify_cS]').send_keys(code_text)
url敏感,匿了,意思大概知道就是处理下面的这个图片中的验证码
以前运行的好好的,但现在报错了
Traceback信息如下
Traceback (most recent call last):
File "D:\Demos\demo1.py", line 15, in <module>
code_text = ocr.classification(ele_pic_bytes) # 从bytes数据中提取 文本
File "D:\Demos\.venv\lib\site-packages\ddddocr\__init__.py", line 1614, in classification
image = image.resize((int(image.size[0] * (64 / image.size[1])), 64), Image.ANTIALIAS).convert('L')
AttributeError: module 'PIL.Image' has no attribute 'ANTIALIAS'
追溯下源码
ddddocr的__init__.py
image = image.resize((int(image.size[0] * (64 / image.size[1])), 64), Image.ANTIALIAS).convert('L')
根据提示PIL.Image没有ANTIALIAS这个属性了
至此问题应该比较清晰了,应该是版本升级导致的
最终定位是ddddocr没有同步,pillow单方面升级导致的,这种太常见了
找了下以前OK的环境,pillow库是9.5
现在默认安装ddddocr依赖的pillow是最新版到了10.0.1
解决就很简单
pip uninstall pillow
pip install pillow==9.5.0
pillow这种大库的升级,肯定会有详尽的说明和兼容处理
好的是它升级的并不频繁
https://pypi.org/project/Pillow/#history
在github上找到10.0.0的CHANGELOG
https://github.com/python-pillow/Pillow/blob/main/docs/releasenotes/10.0.0.rst
有这么一段
Removed | Use instead |
---|---|
Image.LINEAR |
Image.BILINEAR or Image.Resampling.BILINEAR |
Image.CUBIC |
Image.BICUBIC or Image.Resampling.BICUBIC |
Image.ANTIALIAS |
Image.LANCZOS or Image.Resampling.LANCZOS |
发现Image.LANCZOS可以替代,复制一下代码行,替换掉即可
#image = image.resize((int(image.size[0] * (64 / image.size[1])), 64), Image.ANTIALIAS).convert('L')
image = image.resize((int(image.size[0] * (64 / image.size[1])), 64), Image.LANCZOS).convert('L')
在这个代码中有很多ANTIALIAS,都应该替换下
这种简单的问题,ddddocr怎么会没处理呢?
https://pypi.org/project/ddddocr/#history
注意时间:pillow的10.0.0是7月1日发布的,ddddocr是8月30日更新了一次,按理说会同步,事实却并没有?
找到https://github.com/sml2h3/ddddocr
点进去能看到
呃呃呃,作者语法错了,尴尬
Pillow==9.5.0
这个项目维护的不多了,readme.md还是1.4.3的,将就用用吧