Selenium Firefox Python 在无头模式下运行超时初始化驱动程序

Posted

技术标签:

【中文标题】Selenium Firefox Python 在无头模式下运行超时初始化驱动程序【英文标题】:Selenium Firefox Python running in headless mode Timeout on initializing driver 【发布时间】:2020-03-15 13:42:31 【问题描述】: Firefox 版本:60.9.0esr(32 位) 硒版本:3.141.0 Geckodriver 版本:0.24.0(32 位)

所以目前一切都在非无头模式下工作。但我需要在无 GUI 的 linux 服务器中运行这个 python 脚本(因此需要无头模式)。出于某种原因,我所有无头运行的尝试都会导致 selenium Web 驱动程序在初始化时超时。

        from selenium import webdriver

        geckoDriverFilepath = path + "geckodriver24_32.exe"

        opts = webdriver.FirefoxOptions()
        opts.add_argument("--headless")
        opts.add_argument("--width=2560")
        opts.add_argument("--height=1440")

        #initialize driver (breaks/timeouts here)
        driver = webdriver.Firefox(options=opts,executable_path=geckoDriverFilepath)

以下是Traceback:

文件“c:\Users\xUser\Desktop\BOMWebService\Backend\code\FirefoxStarter.py”,第 51 行,在 StartFirefox 中 driver = webdriver.Firefox(options=opts,executable_path=geckoDriverFilepath)

init 中的文件“C:\Users\xUser\Desktop\BOMWebService\Backend\virEnvBOMBackend\lib\site-packages\selenium\webdriver\firefox\webdriver.py”,第 174 行 keep_alive=True)

init 中的文件“C:\Users\xUser\Desktop\BOMWebService\Backend\virEnvBOMBackend\lib\site-packages\selenium\webdriver\remote\webdriver.py”,第 157 行 self.start_session(capabilities, browser_profile)

文件“C:\Users\xUser\Desktop\BOMWebService\Backend\virEnvBOMBackend\lib\site-packages\selenium\webdriver\remote\webdriver.py”,第 252 行,在 start_session response = self.execute(Command.NEW_SESSION, 参数)

文件“C:\Users\xUser\Desktop\BOMWebService\Backend\virEnvBOMBackend\lib\site-packages\selenium\webdriver\remote\webdriver.py”,第 321 行,在执行中 self.error_handler.check_response(response)

文件“C:\Users\xUser\Desktop\BOMWebService\Backend\virEnvBOMBackend\lib\site-packages\selenium\webdriver\remote\errorhandler.py”,第 242 行,在 check_response raise exception_class(message, screen, stacktrace)

selenium.common.exceptions.WebDriverException:消息:超时

任何指针将不胜感激。谢谢!

【问题讨论】:

那是一个相当老的firefox版本(我不知道geckodriver是对应的驱动程序)。您是否有不想使用当前版本的原因?你说你想在 linux 上运行,但你的堆栈跟踪是用于 Windows 的...... 【参考方案1】:

此错误消息...

selenium.common.exceptions.WebDriverException: Message: timed out

...暗示 GeckoDriver 无法启动/生成新的 WebBrowserFirefox Browser 会话。

您的主要问题是您使用的二进制文件版本之间的不兼容性,如下所示:

您的 Selenium Client 版本是 3.141.0,几乎有点旧。 您的 GeckoDriver 版本是 v0.24.0。 您的 Firefox 版本是 v60.9.0esr

所以 Selenium Client v3.141.0GeckoDriver v0.24.0Firefox Browser v60.9.0esr 之间存在明显的不匹配 /p>


解决方案

Selenium升级到当前级别Version 3.141.59。 将GeckoDriver升级到GeckoDriver v0.26.0级别。 GeckoDriver 位于所需位置。 GeckoDriver 对非 root 用户具有可执行权限。 将 Firefox 版本升级到 Firefox v70.0 级别。 清理你的项目工作区通过你的IDE重建你的项目只需要依赖。 如果您的基本 Web 客户端 版本太旧,请卸载它并安装最新的 GA 和发布版本的 Web 客户端。 进行系统重启。 以非 root 用户身份执行 Test。 始终在 tearDown() 方法中调用 driver.quit() 以优雅地关闭和销毁 WebDriverWeb Client 实例。

在这里你可以找到关于Which Firefox browser versions supported for given Geckodriver version?的详细讨论

【讨论】:

以上是关于Selenium Firefox Python 在无头模式下运行超时初始化驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

在Centos7下安装Python+Selenium+Firefox学习环境

python+selenium自动化环境搭建之后,能打开firefox,却不能执行自动化操作

python+selenium启动firefox和chrome

python+selenium+chromewebdriver或Firefox的环境搭建

“Firefox 意外退出。”在 Python 中运行基本 Selenium 脚本时

selenium.common.exceptions.InvalidSessionIdException通过Python在无头模式下使用GeckoDriver Selenium Firefox(示例代