无法使用 EC2 Ubuntu、Python、Selenium、Geckodriver 读取 marionette 端口

问题描述 投票:0回答:3

操作系统:AWS EC2 Ubuntu 22.04.1 LTS
Python:3.10.6
火狐:Mozilla 火狐 107.0
壁虎驱动程序:0.32.0 (2022-11-10)
UFW(Ubuntu 防火墙):不活动
其他:最新版本

from selenium import webdriver
from selenium.webdriver.firefox.service import Service as FirefoxService
from selenium.webdriver.firefox.options import Options as FirefoxOption
from webdriver_manager.firefox import GeckoDriverManager

options = FirefoxOption()
options.headless = True

service = FirefoxService(GeckoDriverManager().install())
# <selenium.webdriver.firefox.service.Service object at 0x7f008f2a7c70>

driver = webdriver.Firefox(
    service=service,
    options=options
)

当我运行这段代码时

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/ubuntu/.local/share/virtualenvs/tool-lKp4P5xD/lib/python3.10/site-packages/selenium/webdriver/firefox/webdriver.py", line 197, in __init__
    super().__init__(command_executor=executor, options=options, keep_alive=True)
  File "/home/ubuntu/.local/share/virtualenvs/tool-lKp4P5xD/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 290, in __init__
    self.start_session(capabilities, browser_profile)
  File "/home/ubuntu/.local/share/virtualenvs/tool-lKp4P5xD/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 383, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/home/ubuntu/.local/share/virtualenvs/tool-lKp4P5xD/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 450, in execute
    self.error_handler.check_response(response)
  File "/home/ubuntu/.local/share/virtualenvs/tool-lKp4P5xD/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 249, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: Failed to read marionette port

我遇到了问题。

在我看来,我认为这是Geckodriver和Firefox之间的通信问题。
但我不知道如何解决。

此外,我已经尝试使用“pyvirtualdisplay”或“xvfb”。
但结果是一样的。
https://azevedorafaela.com/tag/headless-browser-in-ubuntu/

python selenium ubuntu firefox geckodriver
3个回答
2
投票

我找到了另一种方法。

我读了这篇文章。
https://github.com/SeleniumHQ/selenium/issues/10813

我认为这是你在 Ubuntu Snap 包管理器上安装 Firefox 时出现的问题。

它适用于 Ubuntu 20.04。
因为 Snap 不是该版本的默认包管理器。

这可能是在 Ubuntu 22.04 上删除 Snap 的另一种解决方案


0
投票

我的解决方案是删除已安装的

geckodriver
的一个版本,因为我有两个版本:

whereis geckodriver
检查。就我而言,结果是:

geckodriver: /usr/bin/geckodriver /snap/bin/geckodriver

我用

sudo rm /usr/bin/geckodriver
删除了一个版本,您所描述的错误 (
selenium.common.exceptions.TimeoutException: Message: Failed to read marionette port
) 不再出现。


0
投票

我认为使用 apt/snap 安装的 Firefox 二进制文件存在错误,当我从 apt 软件包存储库安装 Firefox 时,我遇到了同样的问题。我通过从 official mozilla source 下载 firefox 并将符号链接二进制文件到 /usr/bin/firefox/

解决了这个问题

首先从系统中删除 Firefox。

apt remove firefox

从官方来源下载 Firefox。 (您可能需要更换下载网址)

wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/116.0.3/linux-x86_64/en-US/firefox-116.0.3.tar.bz2

将下载的存档解压到您想要的位置。我正在使用 opt 来提取存档。

tar -xf firefox-116.0.3.tar.bz2 --directory /opt/

然后将 firefox 二进制文件符号链接到 /usr/bin

ln -s /opt/firefox/firefox /usr/bin/firefox
© www.soinside.com 2019 - 2024. All rights reserved.