我的网络驱动程序管理器工作得很好,但当我用pyinstaller制作.exe文件时,我收到了下面的错误。我发现,如果我不把--noconsole放在pyinstaller命令中,它会工作,但有了--noconsile,程序就不工作了。这是我的代码:
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://www.google.com/")
driver.quit()
以下是我如何使用pyinstaller:创建.exe文件
pyinstaller --onefile --noconsole script.py
这是我得到的错误:
Traceback (most recent call last):
File "script.py", line 797, in program2
File "webdriver_managerchrome.py", line 23, in __init__
File "webdriver_managerdriver.py", line 54, in __init__
File "webdriver_managerutils.py", line 139, in chrome_version
File "os.py", line 983, in popen
File "subprocess.py", line 804, in __init__
File "subprocess.py", line 1142, in _get_handles
OSError: [WinError 6] The handle is invalid
谢谢你的帮助!
如果使用webdriver_manager>版本;3.4.2,则必须先修复此错误。
如果使用webdriver_manager<=版本3.4.2,则错误仍然存在。
以下是关于该项目Github的拉取请求讨论,它解决了这个问题。
为了自己修复错误,我们需要在webdriver_manager/utils.py
中进行更改-导入附加模块并更改两个功能:
-
在开始中导入
subprocess
模块import subprocess
-
请在
def chrome_version()
:中找到该片段with os.popen(cmd) as stream: stdout = stream.read()
-
并更改为以下内容:
with subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, stdin=subprocess.DEVNULL, shell=True) as stream: stdout = stream.communicate()[0].decode()
-
对
def firefox_version()
重复上述步骤。
强烈建议您只在确定可以恢复更改的情况下执行上述操作。