在进行 Python 自动化开发(如爬虫、RPA)时,我们经常会组合使用 ddddocr(验证码识别)和 Playwright(浏览器自动化)。然而,面对 Python 版本的迭代(如 Python 3.13)、复杂的网络环境(公司内网/VPN)以及中文路径等问题,开发者往往会踩进无数个“坑”。
本文将提供一套普适性极强的解决方案,无论你是网络受限的企业用户,还是网络通畅的个人开发者,都能找到适合你的最佳实践。
🟢 第一部分:搞定 ddddocr 与 Python 版本的兼容性
ddddocr 是一个极简的 OCR 库,但它最后一次更新较早,与最新的 Python 3.13 + Pillow 10.x 存在严重的兼容性问题。
1. 经典报错
如果在 Python 3.13 下直接运行,会报:AttributeError: module 'PIL.Image' has no attribute 'ANTIALIAS'
2. 最佳解决方案:降级 + 锁定
最稳妥的方案是使用 Python 3.10 并锁定 Pillow 版本。
- 推荐 Python 版本:3.10.x (兼容性、稳定性最佳)
- 必须锁定的依赖:
Pillow < 10.0.0
🟡 第二部分:虚拟环境 (venv) 的正确姿势
不要把所有库装在全局环境,避免“依赖地狱”。
1. 创建纯净环境
即使电脑安装了 Python 3.13,也可以强制用 3.10 创建环境(前提是你安装了 Python 3.10):
# 在项目根目录运行
py -3.10 -m venv venv
# 激活环境 (Windows)
.\venv\Scripts\activate2. 安装 ddddocr 的正确顺序
务必按顺序执行,防止 Pillow 自动升级到不兼容的新版:
# 1. 升级 pip
pip install --upgrade pip
# 2. 【核心步骤】强制安装旧版 Pillow
pip install "Pillow<10.0.0"
# 3. 再安装 ddddocr
pip install ddddocr🟠 第三部分:解决网络限制与 SSL 证书报错
在公司内网或开启代理时,pip 经常报 SSL: CERTIFICATE_VERIFY_FAILED,这是因为网关解密了 HTTPS 流量。
1. 临时解决方案(最快)
在安装命令中加上 --trusted-host 参数:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn2. 永久解决方案(一劳永逸)
将信任配置写入全局文件,以后无需再输参数:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn🔴 第四部分:Playwright 的安装与下载(分场景)
playwright install 需要下载浏览器内核(Chromium, Firefox, WebKit),这是最容易出问题的环节。
场景 A:网络通畅(家庭用户/无限制网络)
直接使用官方命令即可,无需折腾:
playwright install场景 B:国内网络但无防火墙限制(推荐)
使用淘宝(npmmirror)镜像加速下载:
# 在 PowerShell 中设置临时环境变量
$env:PLAYWRIGHT_DOWNLOAD_HOST="https://npmmirror.com/mirrors/playwright/"
playwright install场景 C:公司内网/极端受限网络(救命稻草)
如果镜像源也被拦截,或者 SSL 报错,请使用手动离线安装法:
- 获取真实链接:运行
playwright install --dry-run。 - 下载:复制显示的下载链接(.zip),用 Chrome/Edge 浏览器下载(浏览器通常信任公司证书)。
解压:
- 注意:浏览器内核默认安装在系统目录,而非虚拟环境。
- 目标路径:
C:\Users\你的用户名\AppData\Local\ms-playwright - 将解压后的文件夹放入该目录,确保文件夹名与
--dry-run提示的一致(如chromium-1091)。
🔵 第五部分:PowerShell 常见疑难杂症
1. 区分 CMD 和 PowerShell
很多报错是因为命令输错了地方:
- CMD:提示符为
C:\Users...>。设置变量用set A=B。 - PowerShell:提示符为
PS C:\Users...>。设置变量用$env:A="B"。 - 建议统一使用 PowerShell。
2. 脚本禁止运行报错
如果运行 activate 报错“在此系统上禁止运行脚本”,请执行以下命令解锁权限:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser输入 Y 确认即可。
🟣 第六部分:后期维护——清理与批量更新
Playwright 升级后不会自动删除旧版浏览器,导致磁盘空间占用激增。请根据你的网络情况选择清理方式。
1. 清理旧版本浏览器
方案 A:网络通畅用户(官方推荐,最干净)
如果你的网速很快,建议直接“推倒重来”,这样能彻底清除所有垃圾:
# 1. 一键卸载所有已下载的浏览器
playwright uninstall --all
# 2. 重新安装当前版本对应的新浏览器
playwright install方案 B:网络受限用户(保守清理)
如果你下载一次浏览器很费劲,千万不要用方案 A。请手动保留当前版本:
查询当前在用的版本:
python -c "from playwright.sync_api import sync_playwright; p=sync_playwright().start(); print(p.chromium.executable_path); p.stop()"- 手动删除:进入
C:\Users\你的用户名\AppData\Local\ms-playwright,保留上面查到的那个文件夹,删除其他旧文件夹。
2. 批量更新第三方库
推荐使用 pip-review 工具。
- 安装:
pip install pip-review - 使用:
pip-review --local --interactive 重要避坑:
- Pillow:选择 N (No),千万别升。
- Playwright:选择 Y,但升级后记得重新运行安装浏览器命令。
⚫ 第七部分:特殊报错——中文路径陷阱
在使用 pip-review 或其他工具脚本时,如果遇到:SyntaxError: Non-UTF-8 code starting with '\xb6' ...
原因
你的项目路径中包含中文(如 C:\Desktop\豆包原图\venv)。Windows 的中文路径编码(GBK)与 Python 脚本默认的 UTF-8 读取方式冲突。
解决方案
临时绕过:不要直接运行脚本,改用模块方式运行:
python -m pip_review --local --interactive根本解决(强烈建议):
- 修改文件夹名为全英文(如
DoubaoImage)。 - 注意:改名后旧的
venv会失效,必须删除 venv 并重新创建。
- 修改文件夹名为全英文(如
📝 总结清单
- 版本:
ddddocr绑定 Python 3.10 + Pillow < 10.0.0。 - 网络:内网环境善用
--trusted-host和手动下载。 - 终端:拥抱 PowerShell,注意
Set-ExecutionPolicy。 - 习惯:项目路径永远不要用中文。
- 维护:网络好就
uninstall --all,网络差就手动删旧留新。