【问题标题】:Unable to run Firefox in headless mode无法在无头模式下运行 Firefox
【发布时间】:2019-08-12 14:11:00
【问题描述】:

我正在尝试使用 Xvfb 在 Firefox 中以无头模式运行 Python + Selenium 脚本,但出现错误。没有太多可用于 Xvfb 解决问题的文档或指南,因此请在此处寻求帮助。

环境信息:
操作系统:CentOS 6.5 版(最小安装)
Xvfb:xorg-x11-server-Xvfb-1.15.0
火狐:52.8.0
壁虎司机:0.24.0
Python:3.6.7

后续步骤:

完成上述要求的安装后。我启动了一个虚拟显示器:

$Xvfb :1 -ac &

另外,我尝试过:

$Xvfb :1 -screen 0 1024x768x24 -extension RANDR &

然后我设置显示变量:

export DISPLAY=:1

当我尝试在 Python 控制台中启动 Selenium WebDriver 时,我收到错误 Connection denied

> from selenium import webdriver
> from pyvirtualdisplay import Display
> display = Display(visible=0, size=(800, 600))
> display.start()
> driver = webdriver.Firefox()

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
keep_alive=True)
File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: connection refused

任何帮助或建议将不胜感激。

【问题讨论】:

  • 这对大多数人来说可能很明显,但是这个文件"&lt;stdin&gt;" 回溯指的是什么?此外,您需要为无头浏览器设置firefoxCapabilitiesfirefoxProfile
  • @C.Peck "" 错误应该从 Selenium webdriver 抛出,但不太清楚为什么它会抛出这样的错误。您能否详细解释一下如何设置 firefox 功能和配置文件,或者请提供链接以供参考
  • 我将首先警告我对 xvfb 完全不熟悉,而且我从未尝试过从 python 命令行运行 selenium(仅通过调用脚本)。我将添加一个可以为您解决此问题的脚本的答案。
  • 在讨论How to make firefox headless programmatically in Selenium with python? 中查看@MortenB cmets。 MOZ_HEADLESS=1 python manage.py test 成功了!不再需要 xvfb-run 了!!!
  • @BillClintonJ,进展如何?你试过我的回答吗?谢谢。

标签: python-3.x selenium xvfb centos6.5 firefox-headless


【解决方案1】:

xvfb 周围有一个名为PyVirtualDisplay 的包装器,它似乎是为这个精确的解决方案而设计的。如果您只是简单地执行pip install pyvirtualdisplay,则以下脚本应该运行一个无头 Firefox 窗口:

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(800, 600))
display.start()

# now Firefox will run in a virtual display. 
# you will not see the browser.
browser = webdriver.Firefox(executable_path="/Users/username/Location/geckodriver")
browser.get('http://www.google.com')
print browser.title
browser.quit()

display.stop()

【讨论】:

  • 使用 pyvirtualdisplay 初始化显示成功,但在启动 webdriver 时再次出现同样的错误。
  • 你的意思是在这条线上browser = webdriver.Firefox()
  • 是的,正确,在执行该行时遇到了与我在问题中提供的相同的错误。
  • 请添加您的问题,而不是评论。
  • 可能你还没有设置geckodriver的可执行路径?您可以使用 webdriver.Firefox(executable_path="/Users/username/Location/geckodriver");我将其编辑到我的问题中。
猜你喜欢
  • 2018-03-16
  • 2021-07-11
  • 1970-01-01
  • 2018-08-12
  • 1970-01-01
  • 2023-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多