是否可以在没有GUI的情况下运行selenium(Firefox)Web驱动程序?

时间:2012-05-01 14:59:07

标签: ubuntu selenium webdriver

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

我们在当前的桌面操作系统上运行各种服务,例如Selenium Web Driver。我的问题是Selenium Web Driver可以从基于cli的系统运行吗?

我的直接想法是它不能,因为它依赖于Firefox,但我希望有人证明我错了!

11 个答案:

答案 0 :(得分:91)

您要找的是

是的,可以无头地在Firefox上运行Selenium。这是您可以关注的post

以下是设置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

答案 1 :(得分:20)

我很容易设法隐藏浏览器窗口。

只是install PhantomJS。然后,更改此行:

driver = webdriver.Firefox()

为:

driver = webdriver.PhantomJS()

您的其他代码不需要更改,也不会打开任何浏览器。出于调试目的,请在代码的不同步骤中使用driver.save_screenshot('screen.png'),或者继续使用Firefox webdriver进行开发。

答案 2 :(得分:10)

如果您需要无头浏览器支持,那么您可以采用另一种方法。

https://github.com/detro/ghostdriver

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

答案 3 :(得分:7)

是。启动webdriver时,您可以使用HTMLUnitDriver代替FirefoxDriver。这是无头浏览器设置。可以找到详细信息here

答案 4 :(得分:4)

可选是使用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

这通常是xvfb的python封装,并且在某种程度上更方便。

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

当我在无头模式(putty-connected console)中使用PhantomJS()而不是Firefox()时,我得到了错误代码-6。但桌面环境中一切正常。

答案 5 :(得分:3)

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

我在这里添加了一些使用说明文档:

https://developer.mozilla.org/en-US/Firefox/Headless_mode#Selenium_in_Java

答案 6 :(得分:2)

另一个选择是GhostDriver,现在由WebDriver正式支持:Ghostdriver actual performance gain

答案 7 :(得分:1)

请注意,HtmlUnitDriver webclient是单线程的,Ghostdriver只有40%的功能是WebDriver。

尽管如此,Ghostdriver可以正常运行以进行测试,但我无法将其连接到WebDriver集线器。

答案 8 :(得分:1)

安装并运行容器化的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')

答案 9 :(得分:0)

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

答案 10 :(得分:0)

也许您需要设置窗口大小的尺寸。就像:

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')

如果也无法正常运行,请尝试增加窗口尺寸。