有没有可能在没有 GUI 的情况下运行 selenium (Firefox) web 驱动程序?

我们正在考虑将我们的生产服务器从 Ubuntu-桌面10.04升级到 Ubuntu-server12.04。

我们在当前的桌面操作系统上运行各种服务,比如 SeleniumWebDriver。我的问题是 SeleniumWebDriver 是否可以在基于 cli 的系统上运行?

我的第一反应是它不能,因为它依赖于 Firefox,但我希望有人能证明我是错的!

124019 次浏览

是的。在启动网络驱动程序时,可以使用 HTMLUnitDriver代替 FirefoxDriver。这是无头浏览器设置。详情可以找到 给你

你要找的是

是的,在 Firefox 上无头运行 Selenium 是可能的。

下面是设置 Xvfb 的总结步骤

#install Xvfb
sudo apt-get install xvfb


#set display number to :99
Xvfb :99 -ac &
export DISPLAY=:99


#you are now having an X display by Xvfb

If you want headless browser support then there is another approach you might adopt.

Https://github.com/detro/ghostdriver

它是在硒会议期间宣布的,目前仍在开发中。它使用 PhantomJS 作为浏览器,比 HTMLUnitDriver 好得多,目前还没有截图,但是它仍然处于活跃的开发阶段。

Be aware that HtmlUnitDriver webclient is single-threaded and Ghostdriver is only at 40% of the functionalities to be a WebDriver.

尽管如此,GhostDriver 可以正常运行测试,而且我在将它连接到 WebDriver 中心时遇到了问题。

Another option is GhostDriver which is now officially supported by WebDriver: GhostDriver 实际性能增益

Chrome 现在有了无头模式:

op = webdriver.ChromeOptions()
op.add_argument('--headless')
driver = webdriver.Chrome(options=op)

一个可选项是像下面这样使用 pyvirtualdisplay:

from pyvirtualdisplay import Display


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


#do selenium job here


display.close()

简短的说法是:

with Display() as display:
# selenium job here

这通常是一个 Python 封装的 xvfb,并且以某种方式更方便。

顺便说一下,虽然 PhantomJS是一个无头浏览器,如果你使用它,就不会打开任何窗口,但似乎 PhantomJS仍然是 需求一个 GUI 环境来工作。

I got Error Code -6 when I use PhantomJS() instead of Firefox() in headless mode (putty-connected console). However everything is ok in desktop environment.

更新: 您不再需要 XVFB 来运行无头 Firefox。Linux 上的 Firefox v55 + 和 Windows/Mac 上的 Firefox v56 + 现在支持无头执行。

我在这里添加了一些如何使用的文档:

Https://developer.mozilla.org/en-us/firefox/headless_mode#selenium_in_java

是的,您可以在没有浏览器的情况下运行测试脚本,但是您应该在 headless 模式下运行它们。

也许你需要设置你的窗口尺寸。就像:

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1920x1080');


browser = webdriver.Chrome(options=options,executable_path = './chromedriver')

如果也不工作,尝试增加窗口大小的尺寸。

Install & run containerized Firefox:

docker pull selenium/standalone-firefox
docker run --rm -d -p 4444:4444 --shm-size=2g selenium/standalone-firefox

使用 webdriver.Remote连接:

driver = webdriver.Remote('http://localhost:4444/wd/hub', DesiredCapabilities.FIREFOX)
driver.set_window_size(1280, 1024)
driver.get('https://www.google.com')