【发布时间】:2012-05-11 02:09:09
【问题描述】:
我们正在考虑将我们的生产服务器从 Ubuntu-desktop 10.04 升级到 Ubuntu-server 12.04。
我们在当前的桌面操作系统上运行各种服务,例如 Selenium Web Driver。我的问题是 Selenium Web 驱动程序可以从基于 cli 的系统运行吗?
我的直接想法是它不能,因为它依赖于 Firefox,但我希望有人证明我错了!
【问题讨论】:
我们正在考虑将我们的生产服务器从 Ubuntu-desktop 10.04 升级到 Ubuntu-server 12.04。
我们在当前的桌面操作系统上运行各种服务,例如 Selenium Web Driver。我的问题是 Selenium Web 驱动程序可以从基于 cli 的系统运行吗?
我的直接想法是它不能,因为它依赖于 Firefox,但我希望有人证明我错了!
【问题讨论】:
Chrome 现在有无头模式:
op = webdriver.ChromeOptions()
op.add_argument('--headless')
driver = webdriver.Chrome(options=op)
【讨论】:
'headless' 不起作用,但是 '--headless' 起作用了。
--headless 甚至可以与 FirefoxOptions() 一起使用
安装并运行容器化 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')
【讨论】:
也许您需要设置窗口大小。就像:
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')
如果也不起作用,请尝试增加窗口大小。
【讨论】:
是的,你可以在没有浏览器的情况下运行测试脚本,但你应该在无头模式下运行它们。
【讨论】:
更新:您不再需要 XVFB 来运行无头 Firefox。 Linux 上的 Firefox v55+ 和 Windows/Mac 上的 Firefox v56+ 现在支持无头执行。
我在这里添加了一些使用方法文档:
https://developer.mozilla.org/en-US/Firefox/Headless_mode#Selenium_in_Java
【讨论】:
一个可选的方法是像这样使用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 环境才能工作。
当我在无头模式下使用 PhantomJS() 而不是 Firefox()(腻子连接控制台)时,我得到了错误代码 -6。但是在桌面环境中一切正常。
【讨论】:
您要查找的是headless-browser。
是的,可以在 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
【讨论】:
Xvfb 创建虚拟显示器,而不是用于安装和配置 Selenium(需要在路径上包含 geckodriver)。
subprocess.Popen('Xvfb...') 或 os.system('Xvfb...') 执行此操作,但请确保在导入网络驱动程序之前执行此操作。
是的。您可以在启动 webdriver 时使用 HTMLUnitDriver 代替 FirefoxDriver。这是无头浏览器设置。详情可见here。
【讨论】:
另一个选项是 GhostDriver,现在 WebDriver 正式支持它:Ghostdriver actual performance gain
【讨论】:
请注意,HtmlUnitDriver webclient 是单线程的,而 Ghostdriver 仅占 WebDriver 功能的 40%。
尽管如此,Ghostdriver 可以正常运行以进行测试,但我无法将其连接到 WebDriver 集线器。
【讨论】:
如果您想要无头浏览器支持,那么您可以采用另一种方法。
https://github.com/detro/ghostdriver
它是在 Selenium 会议期间宣布的,目前仍在开发中。它使用 PhantomJS 作为浏览器,比 HTMLUnitDriver 好得多,还没有截图,但它仍在积极开发中。
【讨论】: