chrome python linux user-interface unix selenium

python - chrome - install selenium ubuntu



¿Cómo ejecuto Selenium en Xvfb? (5)

Esta es la configuración que uso:

Antes de ejecutar las pruebas, ejecuta:

export DISPLAY=:99 /etc/init.d/xvfb start

Y después de las pruebas:

/etc/init.d/xvfb stop

El archivo init.d que uso se ve así:

#!/bin/bash XVFB=/usr/bin/Xvfb XVFBARGS="$DISPLAY -ac -screen 0 1024x768x16" PIDFILE=${HOME}/xvfb_${DISPLAY:1}.pid case "$1" in start) echo -n "Starting virtual X frame buffer: Xvfb" /sbin/start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS echo "." ;; stop) echo -n "Stopping virtual X frame buffer: Xvfb" /sbin/start-stop-daemon --stop --quiet --pidfile $PIDFILE echo "." ;; restart) $0 stop $0 start ;; *) echo "Usage: /etc/init.d/xvfb {start|stop|restart}" exit 1 esac exit 0

Estoy en la instancia EC2. Entonces no hay GUI.

$pip install selenium $sudo apt-get install firefox xvfb

Entonces hago esto:

$Xvfb :1 -screen 0 1024x768x24 2>&1 >/dev/null & $DISPLAY=:1 java -jar selenium-server-standalone-2.0b3.jar 05:08:31.227 INFO - Java: Sun Microsystems Inc. 19.0-b09 05:08:31.229 INFO - OS: Linux 2.6.32-305-ec2 i386 05:08:31.233 INFO - v2.0 [b3], with Core v2.0 [b3] 05:08:32.121 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub 05:08:32.122 INFO - Version Jetty/5.1.x 05:08:32.123 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver] 05:08:32.124 INFO - Started HttpContext[/selenium-server,/selenium-server] 05:08:32.124 INFO - Started HttpContext[/,/] 05:08:32.291 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@1186fab 05:08:32.292 INFO - Started HttpContext[/wd,/wd] 05:08:32.295 INFO - Started SocketListener on 0.0.0.0:4444 05:08:32.295 INFO - Started org.openqa.jetty.jetty.Server@1ffb8dc

Genial, todo debería funcionar ahora, ¿verdad?

Cuando ejecuto mi código:

from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.keys import Keys browser = webdriver.Firefox() browser.get("http://www.yahoo.com")

Entiendo esto:

Error: cannot open display: :0


La forma más fácil es probablemente usar xvfb-run:

DISPLAY=:1 xvfb-run java -jar selenium-server-standalone-2.0b3.jar

xvfb-run hace que toda la autoridad X baile por ti, pruébalo!


Puede usar PyVirtualDisplay (un contenedor de Python para Xvfb) para ejecutar pruebas de WebDriver sin cabeza.

#!/usr/bin/env python from pyvirtualdisplay import Display from selenium import webdriver display = Display(visible=0, size=(800, 600)) display.start() # now Firefox will run in a virtual display. # you will not see the browser. browser = webdriver.Firefox() browser.get(''http://www.google.com'') print browser.title browser.quit() display.stop()

más información

También puede usar xvfbwrapper , que es un módulo similar (pero no tiene dependencias externas):

from xvfbwrapper import Xvfb vdisplay = Xvfb() vdisplay.start() # launch stuff inside virtual display here vdisplay.stop()

o mejor aún, úselo como administrador de contexto:

from xvfbwrapper import Xvfb with Xvfb() as xvfb: # launch stuff inside virtual display here. # It starts/stops in this code block.


Si usa Maven, puede usar xvfb-maven-plugin para iniciar xvfb antes de las pruebas, ejecutarlas usando la variable de entorno DISPLAY relacionada y detener xvfb después de todo.


abra un terminal y ejecute este comando xhost + . Estos comandos deben ejecutarse cada vez que reinicie su máquina. Si todo funciona bien, puede agregarlo a los comandos de inicio

También asegúrese de que en su archivo / etc / environment haya una línea

export DISPLAY=:0.0

Y luego, ejecute sus pruebas para ver si su problema está resuelto.

Todos, tenga en cuenta el comentario de sardathrion a continuación antes de usar esto.