selenium 通过PyInstaller进行.exe转换后,Chromedriver Manager下载不起作用

bttbmeg0  于 2023-02-08  发布在  其他
关注(0)|答案(1)|浏览(241)

亲爱的Stackoverflow社区,
我使用Selenium和Python来自动化一项任务。当我的程序以www.example.com的身份运行时myscript.py,它可以无缝地工作。我使用以下代码将myscript.py转换为myscript.exe:

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

生成的myscript.exe文件不起作用,并出现以下错误:

Traceback (most recent call last):
File "myscript.py", line 155, in <module>
File "myscipt.py", line 32, in main
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 35, in get
File "webdriver_manager\core\utils.py", line 289, in show_download_progress
File "tqdm\std.py", line 1109, in __init__
File "tqdm\std.py", line 1361, in refresh
File "tqdm\std.py", line 1509, in display
File "tqdm\std.py", line 350, in print_status
File "tqdm\std.py", line 343, in fp_write
File "tqdm\utils.py", line 89, in __getattr__
AttributeError: 'NoneType' object has no attribute 'write'

主线中的第32行为:

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

我可能错过了一些基本的东西。任何来自社区的帮助都是非常感谢的。

1rhkuytd

1rhkuytd1#

问题是webdriver_manager使用tqdm在show_download_progress函数执行期间在终端显示进度条,但是由于您使用的是--windowed选项和pyinstaller,所以程序不是在终端上运行的,所以当tqdm试图显示进度条时,没有任何内容可供写入,这就是为什么它显示NoneType object has no attribute 'write'
这通常可以通过以下方法解决:在应用程序入口点附近使用write方法将stdoutstderr显式设置为对象,以便在任何其他代码尝试写入它们之前设置它们。
例如:

import io
import sys

buffer = io.StringIO()
sys.stdout = buffer
sys.stderr = buffer

相关问题