在进行 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\activate

2. 安装 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.cn

2. 永久解决方案(一劳永逸)

将信任配置写入全局文件,以后无需再输参数:

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 报错,请使用手动离线安装法

  1. 获取真实链接:运行 playwright install --dry-run
  2. 下载:复制显示的下载链接(.zip),用 Chrome/Edge 浏览器下载(浏览器通常信任公司证书)。
  3. 解压

    • 注意:浏览器内核默认安装在系统目录,而非虚拟环境。
    • 目标路径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。请手动保留当前版本:

  1. 查询当前在用的版本

    python -c "from playwright.sync_api import sync_playwright; p=sync_playwright().start(); print(p.chromium.executable_path); p.stop()"
  2. 手动删除:进入 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 读取方式冲突。

解决方案

  1. 临时绕过:不要直接运行脚本,改用模块方式运行:

    python -m pip_review --local --interactive
  2. 根本解决(强烈建议)

    • 修改文件夹名为全英文(如 DoubaoImage)。
    • 注意:改名后旧的 venv 会失效,必须删除 venv 并重新创建

📝 总结清单

  1. 版本ddddocr 绑定 Python 3.10 + Pillow < 10.0.0。
  2. 网络:内网环境善用 --trusted-host 和手动下载。
  3. 终端:拥抱 PowerShell,注意 Set-ExecutionPolicy
  4. 习惯:项目路径永远不要用中文
  5. 维护:网络好就 uninstall --all,网络差就手动删旧留新。
最后修改:2025 年 12 月 19 日
如果觉得我的文章对你有用,请随意赞赏