WebDriver异常:消息:服务geckodriver意外退出。状态代码为:64,使用Selenium Geckodriver Firefox在FreeBSD jail中出现错误。

15

针对一些测试,我已经创建了一个全新的TrueNAS 12.3 FreeBSD Jail并启动它,然后使用以下命令安装了python3, firefox, geckodriverpip:

pkg install python3 firefox geckodriver py38-pip
pip install --upgrade pip
setenv CRYPTOGRAPHY_DONT_BUILD_RUST 1
pip install cryptography==3.4.7
pip install selenium

之后,当我想在Python代码中使用Selenium与Firefox一起使用时,它无法正常工作:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
options = Options()
options.headless = True
driver = webdriver.Firefox(options=options)

它带来的是

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.8/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
    self.service.start()
  File "/usr/local/lib/python3.8/site-packages/selenium/webdriver/common/service.py", line 98, in start
    self.assert_process_still_running()
  File "/usr/local/lib/python3.8/site-packages/selenium/webdriver/common/service.py", line 110, in assert_process_still_running
    raise WebDriverException(
selenium.common.exceptions.WebDriverException: Message: Service geckodriver unexpectedly exited. Status code was: 64

有趣的是,我大约一年前设置了另一个类似的监狱(也是这样设置的),它可以正常工作而不会抛出错误(可能是因为不同的版本?)!
以下是 geckodriver.log 的唯一内容:
geckodriver: error: Found argument '--websocket-port' which wasn't expected, orisn't valid in this context

USAGE:
    geckodriver [FLAGS] [OPTIONS]

For more information try --help

有什么方法可以让它正常工作吗?我已经看过这个问题,但是它似乎相当过时。
Firefox 95.0.2,geckodriver 0.26.0,Python 3.8.12,Selenium 4.1.0

你正在使用哪个Selenium和GeckoDriver版本? - undetected Selenium
@undetectedSelenium Firefox 95.0.2,geckodriver 0.26.0,Python 3.8.12,Selenium 4.1.0 - Kurtibert
糟糕,可能在查看错误时我忽略了问题的最后一行。现在我能看到它了。 - undetected Selenium
对于遇到相同错误信息的人,简短概括一下:(解决方案可能是)更新至 https://github.com/mozilla/geckodriver/releases/tag/v0.30.0 - a.t.
2个回答

25

这个错误信息...

selenium.common.exceptions.WebDriverException: Message: Service geckodriver unexpectedly exited. Status code was: 64

以及GeckoDriver日志...

geckodriver: error: Found argument '--websocket-port' which wasn't expected, or isn't valid in this context

这意味着GeckoDriver无法启动/生成新的浏览上下文,即会话。


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

  • Selenium Client 版本为 4.1.0
  • 但您的 GeckoDriver 版本为 0.26.0

正如@ernstki评论中提到:

您正在运行早于0.30.0版本的geckodriver,它缺少--websocket-port选项,而新的/较新的Selenium版本似乎依赖于它。

简单来说,在之前的GeckoDriver版本v0.29.0之前,--websocket-port选项没有被使用,但现在在Selenium v4.0.1中是强制性的。
此外,@whimboo在他的评论中也确认了:

正如已经表明的问题不是geckodriver而是Selenium。因此,您应该在Selenium存储库上创建一个问题,以便可以添加一个选项,以便不总是传递--websocket-port参数。如果该请求被拒绝,则必须使用旧版Selenium,如果确实需要测试旧版geckodriver版本。


解决方案

请确保:

  • Selenium 已升级至当前版本 4.1.0
  • GeckoDriver 已升级至版本 v0.30.0
  • Firefox 已升级至当前版本 v96.0.2

FreeBSD版本

如果您正在使用的FreeBSD版本中,GeckoDriver版本较旧,在这些情况下,您必须将Selenium降级至v3.x级别。

命令(提供者:Kurtibert):

  • 卸载 Selenium:

    pip3 uninstall selenium;
    
  • 安装 Selenium:

    pip3 install 'selenium<4.0.0'
    

由于我的 pkg 没有提供比 0.26.0 更高版本的内容,我猜在新的 Selenium 版本能够在 FreeBSD 上可用之前,有人必须构建一个 FreeBSD 版本的 geckodriver?或者我漏掉了什么吗? - Kurtibert
1
@Kurtibert 在这种情况下,您必须将Selenium降级到v3.x级别。我甚至会在答案中加入这个条款。 - undetected Selenium
1
是的,我发现 v3.141.0 可以正常工作(如果您想将其添加到答案中)。 pip3 uninstall selenium; pip3 install 'selenium<4.0.0' - Kurtibert
已使用命令更新完成。 - undetected Selenium

3
我将以下代码添加到我的 Dockerfile 中,问题得到了解决。我的问题与版本有关。
使用 Selenium 4.1.0 和 geckodriver v30,问题已经解决。
RUN pip install -U selenium==4.1.0
RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.30.0/geckodriver-v0.30.0-linux64.tar.gz
RUN tar -x geckodriver -zf geckodriver-v0.30.0-linux64.tar.gz -O > /usr/local/bin/geckodriver
RUN chmod +x /usr/local/bin/geckodriver
RUN rm geckodriver-v0.30.0-linux64.tar.gz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接