将Web驱动程序管理器与pyinstaller一起使用时出错



我的网络驱动程序管理器工作得很好,但当我用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中进行更改-导入附加模块并更改两个功能:

  1. 在开始中导入subprocess模块

    import subprocess
    
  2. 请在def chrome_version():中找到该片段

    with os.popen(cmd) as stream: 
    stdout = stream.read()
    
  3. 并更改为以下内容:

    with subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, stdin=subprocess.DEVNULL,
    shell=True) as stream:
    stdout = stream.communicate()[0].decode()
    
  4. def firefox_version()重复上述步骤。

强烈建议您只在确定可以恢复更改的情况下执行上述操作。

相关内容

  • 没有找到相关文章

最新更新