You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyInstaller打包Python脚本为exe后,ChromeDriverManager下载失效

问题解决:PyInstaller打包Selenium脚本后exe运行报错AttributeError

错误原因

你使用--windowed参数打包时,程序运行会隐藏控制台窗口,但webdriver-manager依赖的tqdm库需要向标准输出打印下载进度条,此时标准输出对象为None,因此触发了'NoneType' object has no attribute 'write'错误。

解决方案

方案1:移除--windowed参数,保留控制台

修改打包命令,去掉--windowed参数:

PyInstaller --onefile --icon="icon.ico" --add-data "icon.ico;." myscript.py

运行生成的exe时会弹出控制台,tqdm能正常输出进度,程序即可正常执行。

方案2:禁用webdriver-manager的进度条输出

如果必须保留无窗口模式,可在代码开头添加环境变量禁用进度条:

import os
os.environ['WDM_PROGRESS_BAR'] = '0'

或者在初始化ChromeDriverManager时设置日志级别关闭输出:

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager(log_level=0).install()), options=options)

方案3:手动指定ChromeDriver路径,跳过自动下载

  1. 预先下载与你的Chrome版本匹配的ChromeDriver,放到脚本目录。
  2. 修改打包命令,将ChromeDriver加入打包资源:
PyInstaller --onefile --windowed --icon="icon.ico" --add-data "icon.ico;." --add-data "chromedriver.exe;." myscript.py
  1. 修改代码,适配打包后的资源路径:
import sys
import os

def resource_path(relative_path):
    # 获取打包后资源的实际路径
    base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
    return os.path.join(base_path, relative_path)

driver_path = resource_path("chromedriver.exe")
driver = webdriver.Chrome(service=ChromeService(driver_path), options=options)

内容的提问来源于stack exchange,提问作者manuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:37:33