无法在无头模式下运行 Firefox
Posted
技术标签:
【中文标题】无法在无头模式下运行 Firefox【英文标题】:Unable to run Firefox in headless mode 【发布时间】: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
任何帮助或建议将不胜感激。
【问题讨论】:
这对大多数人来说可能很明显,但是这个文件"<stdin>"
回溯指的是什么?此外,您需要为无头浏览器设置firefoxCapabilities
和firefoxProfile
。
@C.Peck "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");我将其编辑到我的问题中。以上是关于无法在无头模式下运行 Firefox的主要内容,如果未能解决你的问题,请参考以下文章
Selenium webdriver 无法在 chrome 无头模式下定位元素
在无头模式下使用 Firefox 改进 scrapy 和 selenium