ddddocr1.4.8失效的解决方法
1. 问题描述
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敏感,匿了,意思大概知道就是处理下面的这个图片中的验证码

以前运行的好好的,但现在报错了
2. 报错分析
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单方面升级导致的,这种太常见了
3. 解决方法
3.2 回退pillow库版本
找了下以前OK的环境,pillow库是9.5
现在默认安装ddddocr依赖的pillow是最新版到了10.0.1
解决就很简单
- 卸载pillow10.0.1
pip uninstall pillow - 重装pillow9.5
pip install pillow==9.5.0
3.3 修改ddddocr源码
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,都应该替换下
4. ddddocr 犯错了?
这种简单的问题,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的,将就用用吧
ddddocr1.4.8失效的解决方法的更多相关文章
- margin-top失效的解决方法
异常处理汇总-前端系列 http://www.cnblogs.com/dunitian/p/4523015.html 我的是属于这种情况 按照网上的说法,我就是这个现象了 两个层box1和box2,b ...
- Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法
Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法 2014-03-27 11:44:46| 分类: Easy UI|举报|字号 订阅 可以使用$.parser.pa ...
- IE7的overflow失效的解决方法
IE7的position:relative bug今天遇到了一个相对定位(position:relaitve)引起的IE7中overflow:hidden失效的bug,特此记录!解决方法很简单,给父层 ...
- ode.js 版本控制 nvm 和 n 使用 及 nvm 重启终端失效的解决方法
今天的话题包括2个部分 node.js 下使用 nvm 或者 n 来进行版本控制 nvm 安装node.js 版本后,重启终端 node , npm 环境变量失效 第一部分 用什么来管理 node.j ...
- jquery中checkbox全选失效的解决方法
这篇文章主要介绍了jquery中checkbox全选失效的解决方法,需要的朋友可以参考下 如果你使用jQuery 1.6 ,代码if ( $(elem).attr(“checked”) ),将 ...
- IE8下部分方法失效的解决方法
1.IE8下String的Trim()方法失效的解决方法 用jquery的trim()方法,$.trim(str)就可以了: 例:_id.trim() !='' 改为 $.trim(_id) != ...
- IIS上发布站点后URL重写失效的解决方法
在发布网站时URL重写有可能会失效,如果失效的话就需要您设置一下IIS:1.Windows XP系统或Windows 2003系统等使用以下方法:>打开IIS,主目录-〉配置-〉映射-〉在窗体左 ...
- CentOS忘记密码修改方案以及centos卡在开机登录界面,命令失效的解决方法
CentOS忘记密码修改方案 应用场景 linux管理员忘记root密码,需要进行找回操作. 注意事项:本文基于CentOS7.2环境进行操作的,由于CentOS的版本之间是有差异的,继续之前请先确定 ...
- UEditor设置内容setContent()失效的解决方法
ueditor常见用法: https://blog.csdn.net/qq_31879707/article/details/54894735#UE.Editor:setContent() UEdit ...
- IE8下String的Trim()方法失效的解决方法
String的Trim()方法失效,在ie8下是有这样的情况的,解决方法也很简单使用$.trim(str)即可,需要的朋友可以了解下 用jquery的trim()方法,$.trim(str)就可以了.
随机推荐
- 深入浅出MySQL - 架构与执行
Photo by Merilin Kirsika Tedder from Pexels 一.MySQL的逻辑架构 MySQL作为一个流行的开源关系型数据库管理系统,它可以运行在多种平台上,支持多种存储 ...
- C++面试八股文:static_cast了解一下?
某日二师兄参加XXX科技公司的C++工程师开发岗位第20面: 面试官:C++中支持哪些类型转换? 二师兄:C++支持C风格的类型转换,并在C++11引入新的关键字规范了类型转换. 二师兄:C++11引 ...
- 每日一题 力扣 1377 https://leetcode.cn/problems/frog-position-after-t-seconds/
力扣 1377 https://leetcode.cn/problems/frog-position-after-t-seconds/ 这道题目用dp去做,构建邻接矩阵,做的时候需要注意题目条件,如果 ...
- Stable Diffusion生成图片的参数查看与抹除方法
前几天分享了几张Stable Diffusion生成的艺术二维码,有同学反映不知道怎么查看图片的参数信息,还有的同学问怎么保护自己的图片生成参数不会泄露,这篇文章就来专门分享如何查看和抹除图片的参数. ...
- DLL注入-Windows消息钩取
0x01 钩子 钩子,英文Hook,泛指钓取所需东西而使用的一切工具.后来延伸为"偷看或截取信息时所用的手段或工具". 挂钩:为了偷看或截取来往信息而在中间设置岗哨的行为 钩取:偷 ...
- PTA 21级数据结构与算法实验4—字符串和数组
目录 7-1 字符串模式匹配(KMP) 7-2 [模板]KMP字符串匹配 7-3 统计子串 7-4 好中缀 7-5 病毒变种 7-6 判断对称矩阵 7-7 三元组顺序表表示的稀疏矩阵转置运算Ⅰ 7-8 ...
- pe文件对齐
PE中规定了三类对齐:数据在内存中的对齐. 数据在文件中的对齐.资源文件资源数据的对齐. 1.内存对齐 由于windows操作系统对内存属性的设置以也为单位,所以通常情况下,节在内存中的对齐单位必须至 ...
- Elementary OS old version download 旧版本下载
Elementary OS 号称是最漂亮的Linux发行版,没有之一.确实,他的整体风格看起来就是特别舒服,说不出哪里特别好,但也挑不出什么毛病.相比之下,其他Linux的界面总感觉不太和谐.比如特别 ...
- 关于开设go语言专题的说明
这个博客账号已经停更了约5年,期间我经历了比较多的事情,开始几个github开源项目,例如go-etl已经有两年.现在已经我在这方面有了许多积累,足够开设相关的专题.不用担心博主会断更,因为相关的内容 ...
- javascript中一些难以理解的专有名词 1(也不是很专有)
变量提升 变量提升:是指js代码执行过程中,js引擎把变量的声明和函数的声明提升到代码的开头的"行为". 变量和函数在代码里的位置是不会变的,而是在编译阶段被js引擎放入内存中. ...