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


113

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

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

我立即想到的是,它不能,因为它依赖Firefox,但是我希望有人证明我做错了!


Answers:


102

您正在寻找的是

是的,有可能在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

5
这有效并支持屏幕截图。我用这个 它也适用于谷歌浏览器。
艾萨克(Isaac)

我认为这不再可行(至少不容易,因为它需要一个像chrome一样的新geckodriver)
Archimedes Trajano

1
@ArchimedesTrajano这仍然有效。这些说明用于使用来创建虚拟显示器Xvfb,而不是用于安装和配置Selenium(这需要geckodriver在路径上进行)。
expz

2
我喜欢从Python中执行此操作,您可以使用subprocess.Popen('Xvfb...')os.system('Xvfb...')来执行此操作,但请确保在导入webdriver之前先执行此操作。
wordforthewise

4
该链接现在已断开
老男孩

22

Chrome现在具有无头模式:

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

4
PhantomJS当前未处于积极开发中。Git存储库已归档。
Wojciech Jakubas

1
硒也停止以下消息支持PhantomJS“UserWarning:对PhantomJS硒支持已经贬值,请Chrome或Firefox,而不是使用无头版本”
约尔格

11

是。您可以使用HTMLUnitDriver,而不是用于FirefoxDriver同时启动的webdriver。这是无头的浏览器设置。详细信息可以在这里找到。


1
这会支持诸如save_screenshot()之类的功能吗?coreygoldberg.blogspot.co.uk/2011/06/…–不

尚未尝试过,但可能是可行的,因为您实际上仍在创建UI,但将其显示在“虚拟”窗口中。
grahaminn 2012年

2
HTMLUnitDriver将不支持捕获屏幕截图,因为根本不呈现内容(问题1361)。我可以想到的另一种方法是使用getHTMLSource并显示HTML页面而不是屏幕截图。
2012年

10

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

https://github.com/detro/ghostdriver

它在Selenium会议期间宣布,目前仍在开发中。它使用PhantomJS作为浏览器,并且比HTMLUnitDriver更好,还没有截图,但是由于它仍在积极开发中。


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

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

顺便说一句,尽管PhantomJS它是无头浏览器,如果您使用它,则不会打开任何窗口,但似乎PhantomJS需要使用gui环境。

当我在无头模式(使用putty连接的控制台)中使用PhantomJS()而不是时,出现错误代码-6 Firefox()。但是,在桌面环境中一切正常。


3

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

我在这里添加了一些使用方法文档:

https://developer.mozilla.org/zh-CN/Firefox/Headless_mode#Selenium_in_Java


1
评论不作进一步讨论;此对话已转移至聊天
巴尔加夫饶

这对我不起作用。我不确定,但我认为仍然需要XVFB。
Max Malysh

几年来,我一直在Firefox和Chrome上使用无头浏览器。Selenium的WebDriver接口现在甚至支持setHeadless参数。
Nicholas DiPiazza


1

请注意,HtmlUnitDriver Web客户端是单线程的,而Ghostdriver仅是WebDriver的40%。

但是,Ghostdriver可以正常运行以进行测试,并且在将其连接到WebDriver集线器时遇到问题。


这是否提供了其他答案没有提供的任何新信息?
奥斯汀·亨利

0

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


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

如果还是不起作用,请尝试增加窗口大小的尺寸。


0

安装并运行容器化的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')
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.