PAYATHON 2026

PyInstaller 打包后找不到 Selenium 的 Chrome WebDriver 模块怎么办?

数据小陈

可以先用 --hidden-import=selenium.webdriver.chrome.webdriver 显式收集报错中的模块,重新打包后再验证。从 traceback 看,Selenium 的部分代码已经进入运行流程。优先检查动态导入的子模块是否漏打包,并确认打包环境与 PyCharm 使用的环境一致。

现有信息不足以判断是否存在版本兼容性问题。补充这一个模块,也未必能解决所有依赖问题。

为什么 IDE 中正常,EXE 却缺少模块?

PyCharm 运行程序时,可以直接访问当前 Python 环境中安装的包;打包后的程序依赖 PyInstaller 收集进去的模块。

traceback 中出现了 __getattr__ 和 import_module,说明报错发生在运行时动态导入过程中。PyInstaller 的分析可能漏掉了这条依赖,需要检查隐藏导入。

缺失的是 Python 模块 selenium.webdriver.chrome.webdriver。不能仅凭这条报错认定 chromedriver.exe 缺失,暂时不必修改驱动路径。

1. 确认使用了相同的 Python 环境

在用于打包的终端中执行:

python -c "import sys; print(sys.executable)"
python -m pip show selenium pyinstaller
python -c "import selenium.webdriver.chrome.webdriver as m; print(m.__file__)"

将输出的 Python 路径与 PyCharm 项目配置的解释器路径对照。如果不一致,先切换到对应环境,再运行打包命令。

如果最后一条命令也报 ModuleNotFoundError,先修复该环境中的 Selenium 安装,直到能直接导入这个模块。打包环境中不存在的模块,即使增加打包参数也无法收集。

2. 添加隐藏导入并保留控制台

确认模块可以直接导入后,执行:

python -m PyInstaller --clean --onefile --console --hidden-import=selenium.webdriver.chrome.webdriver main.py

使用 python -m PyInstaller 可以明确让打包过程使用当前 python 对应的环境。--hidden-import 用于补充模块依赖,--clean 用于清理打包缓存。

排查时先使用 --console,方便查看完整异常。构建完成后,在终端运行新生成的文件:

.\dist\main.exe

确认运行的是本次生成的 EXE。

3. 如果继续缺少 Selenium 子模块

如果补充上述模块后,又报另一个 Selenium 子模块缺失,可以尝试扩大收集范围:

python -m PyInstaller --clean --onefile --console --collect-submodules=selenium main.py

--collect-submodules=selenium 会收集 Selenium 的子模块,适合排查连续出现的模块遗漏,但可能增加打包体积。

这个参数针对 Python 模块,不代表浏览器、驱动程序或其他外部文件也已全部包含。如果后续出现驱动定位或浏览器启动失败的异常,需要根据新报错继续处理。

4. 验证成功后再隐藏控制台

确认程序能够启动并完成实际浏览器操作后,再将有效打包命令中的 --console 替换为 --noconsole。

原问题没有提供 Python、Selenium 和 PyInstaller 的具体版本。如果补充依赖后仍然失败,应保留这些版本信息和新的完整 traceback,再判断是否需要调整版本或打包配置。

备注:内容仅供参考。