我们正在考虑将我们的生产服务器从 Ubuntu-桌面10.04升级到 Ubuntu-server12.04。
我们在当前的桌面操作系统上运行各种服务,比如 SeleniumWebDriver。我的问题是 SeleniumWebDriver 是否可以在基于 cli 的系统上运行?
我的第一反应是它不能,因为它依赖于 Firefox,但我希望有人能证明我是错的!
是的。在启动网络驱动程序时,可以使用 HTMLUnitDriver代替 FirefoxDriver。这是无头浏览器设置。详情可以找到 给你。
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:
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,并且以某种方式更方便。
xvfb
顺便说一下,虽然 PhantomJS是一个无头浏览器,如果你使用它,就不会打开任何窗口,但似乎 PhantomJS仍然是 需求一个 GUI 环境来工作。
PhantomJS
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.
PhantomJS()
Firefox()
更新: 您不再需要 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连接:
webdriver.Remote
driver = webdriver.Remote('http://localhost:4444/wd/hub', DesiredCapabilities.FIREFOX) driver.set_window_size(1280, 1024) driver.get('https://www.google.com')