2012-05-01 21 views
83

Estamos considerando actualizar nuestro servidor de producción de Ubunt- de escritorio 10.04 a Ubunt- servidor 12.04.¿Es posible ejecutar el controlador web de selenio (Firefox) sin una GUI?

Tenemos varios servicios que se ejecutan en nuestro sistema operativo de escritorio actual, como Selenium Web Driver. Mi pregunta es: ¿Se puede ejecutar Selenium Web Driver desde un sistema basado en cli?

Mi primer pensamiento es que no puede, porque depende de Firefox, pero me gustaría que alguien me pruebe mal.

+0

relacionada: [Correr sin cabeza selenio con Chrome] (http://www.chrisle.me/2013/08/running-headless -selenium-with-chrome /) – jfs

Respuesta

78

Lo que estás buscando es un .

Sí, es posible ejecutar Selenium en Firefox sin cabeza. Aquí hay un post que puedes seguir.

Aquí son los pasos resumidos para establecer 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 
+3

Esto funciona y admite capturas de pantalla. Yo uso esto. También funciona con google chrome. – Isaac

+0

No creo que esto funcione más (al menos no es fácil, porque requiere un nuevo geckodriver como lo hizo Chrome) –

+1

@ArchimedesTrajano Esto todavía funciona. Las instrucciones son para crear una pantalla virtual usando 'Xvfb', no para instalar y configurar Selenium (que requiere tener' geckodriver' en la ruta). – expz

7

Sí. Puede usar HTMLUnitDriver en su lugar para FirefoxDriver mientras inicia el controlador de web. Esta es la configuración del navegador sin cabeza. Los detalles se pueden encontrar here.

+1

¿Sería compatible con funciones como save_screenshot()? http://coreygoldberg.blogspot.co.uk/2011/06/python-selenium-webdriver-capture.html – nonshatter

+0

No lo he intentado, pero puede ser posible porque todavía está creando una interfaz de usuario, pero mostrándola en una ventana 'virtual'. – grahaminn

+2

HTMLUnitDriver NO será compatible con la captura de pantalla de captura ya que el contenido no se representa en absoluto (Problema 1361). Una alternativa que puedo pensar es usar getHTMLSource y mostrar la página HTML en lugar de la captura de pantalla. –

10

Si desea soporte de navegador sin cabeza luego hay otro enfoque que puede adoptar.

https://github.com/detro/ghostdriver

Se anunció durante la Conferencia de selenio y que todavía está en desarrollo. Utiliza PhantomJS como navegador y es mucho mejor que HTMLUnitDriver, todavía no hay capturas de pantalla, pero todavía está en desarrollo activo.

1

Tenga en cuenta que HtmlUnitDriver webclient es de subproceso único y Ghostdriver solo tiene el 40% de las funcionalidades para ser un WebDriver.

No obstante, Ghostdriver se ejecuta correctamente para las pruebas y tengo problemas para conectarlo al concentrador WebDriver.

+0

¿Esto proporciona alguna información nueva que las otras respuestas no? –

15

fácilmente logré ocultar la ventana del navegador.

Just install PhantomJS. A continuación, cambie esta línea:

driver = webdriver.Firefox() 

a:

driver = webdriver.PhantomJS() 

El resto de su código no tendrá que ser cambiado y no hay ningún navegador se abrirá. Para fines de depuración, use driver.save_screenshot('screen.png') en diferentes pasos de su código o simplemente siga usando el controlador de Internet de Firefox en desarrollo.

4

Un opcional es utilizar pyvirtualdisplay así:

from pyvirtualdisplay import Display 

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

#do selenium job here 

display.close() 

Una versión más corta es:

with Display() as display: 
    # selenium job here 

Esto es generalmente un encapsulado pitón de xvfb, y más conveniente de alguna manera.

Por cierto, aunque PhantomJS es un navegador sin cabeza y sin ventana será abierta si lo usa, parece que todavía PhantomJS necesidades de un entorno gráfico para trabajar.

Recibí el código de error -6 cuando uso PhantomJS() en lugar de Firefox() en modo headless (consola conectada a la masilla). Sin embargo, todo está bien en el entorno de escritorio.

Cuestiones relacionadas