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

Selenium Python打包exe报错:AttributeError: 'NoneType'无write属性

问题:爬虫代码打包为exe后运行出现AttributeError错误

我编写的网页爬虫直接运行完全正常,但打包成可执行文件(exe)后运行时报错,错误栈如下:

Traceback (most recent call last):
File "Robo Ajuste Norber.py", line 77, in <module>
File "webdriver_manager\chrome.py", line 39, in install
File "webdriver_manager\core\manager.py", line 30, in _get_driver_path
File "webdriver_manager\core\download_manager.py", line 28, in download_file
File "webdriver_manager\core\http.py", line 39, in get
File "webdriver_manager\core\utils.py", line 264, in show_download_progress
File "tqdm\std.py", line 1095, in __init__
File "tqdm\std.py", line 1344, in refresh
File "tqdm\std.py", line 1492, in display
File "tqdm\std.py", line 347, in print_status
File "tqdm\std.py", line 340, in fp_write
File "tqdm\utils.py", line 71, in __getattr__
AttributeError: 'NoneType' object has no attribute 'write'

代码第76-80行内容见截图,求解决办法。


解决方案

这个错误是因为打包成exe后(尤其是用--windowed/--noconsole参数打包时),标准输出流stdout变为None,而webdriver_manager依赖的tqdm进度条组件试图向不存在的输出流写入内容导致的。可以通过以下几种方式解决:

方法1:禁用webdriver_manager的进度条

在代码中初始化ChromeDriverManager时,关闭日志或进度条显示:

from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
from selenium import webdriver

# 设置日志级别为0关闭进度条
driver = webdriver.Chrome(service=Service(ChromeDriverManager(log_level=0).install()))

# 或者通过环境变量禁用进度条
import os
os.environ['WDM_PROGRESS_BAR'] = '0'
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

方法2:打包时保留控制台窗口

如果使用PyInstaller打包,不要使用--windowed或--noconsole参数,确保打包后的exe保留控制台输出:

pyinstaller "Robo Ajuste Norber.py" --onefile

如果必须使用无窗口模式,可以在代码中手动为tqdm指定输出流:

import sys
from tqdm import tqdm

# 手动指定tqdm的输出流为stderr,避免stdout为None的问题
tqdm_out = sys.stderr
tqdm.write = lambda msg: print(msg, file=tqdm_out)

方法3:手动下载ChromeDriver并打包到exe中

跳过webdriver_manager的自动下载,手动下载对应版本的ChromeDriver,将其和代码放在同一目录,打包时包含进去,代码中直接指定Driver路径:

from selenium.webdriver.chrome.service import Service
from selenium import webdriver

# 假设chromedriver.exe和exe在同一目录
driver = webdriver.Chrome(service=Service('./chromedriver.exe'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:55:23