2011-08-03 12 views
6

Estoy intentando automatizar un proceso de inicio de sesión en mi aplicación web utilizando la biblioteca de cliente de Selenium-Python. El objetivo final es aprender la biblioteca de Python Client de Selenium. Por lo tanto, realmente agradecería las respuestas de aquellos que están dentro de Selenium-Python.Biblioteca de cliente de Selenium-Python - Automatización en el fondo

corriente I tienen un código como este:

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

browser = webdriver.Firefox() # Get local session of firefox 
browser.get("http://myServer/WebAccess/login.html") # Load Application page 
elem = browser.find_element_by_name("LoginID") # Find the Login box 
elem.send_keys("Administrator") 
elem = browser.find_element_by_name("Password") # Find the Password box 
elem.send_keys("Administrator" + Keys.RETURN) 

Esto funciona bien, pero todo sucede en el front-end. Quiero decir que literalmente abre un Firefox, ingresa las claves en los valores, hace clic en Enviar, etc., que es como se esperaba.

Me pregunto, ¿hay algo que pueda hacer para que todo esto suceda en el fondo? Digamos que no quiero monitorear lo que está haciendo el script. Solo quiero que se ejecute en segundo plano. ¿Hay alguna forma de lograr esto?

EDITAR

descargado e instalado PyVirtualDisplay en mis ventanas usando el comando setup.py install. También se instaló el módulo EasyProcess y Path.

ahora tengo un código de ejemplo como éste

from pyvirtualdisplay import Display 
from selenium import webdriver 
display = Display(visible=0, size=(1024, 768)) 
display.start() 
browser = webdriver.Firefox() 
browser.get('http://www.google.com') 
print browser.title 
browser.close() 
display.stop() 

consigo los siguientes errores en la ejecución de este código:

`Traceback (most recent call last): 
    File "C:\Documents and Settings\user\Desktop\Sel.py", line 1, in <module> 
    from pyvirtualdisplay import Display 
    File "C:\Python27\lib\site-packages\pyvirtualdisplay\__init__.py", line 1, in <module> 
    from display import Display 
    File "C:\Python27\lib\site-packages\pyvirtualdisplay\display.py", line 2, in <module> 
    from pyvirtualdisplay.xephyr import XephyrDisplay 
    File "C:\Python27\lib\site-packages\pyvirtualdisplay\xephyr.py", line 8, in <module> 
    EasyProcess([PROGRAM, '-help'], url=URL, ubuntu_package=PACKAGE).check_installed() 
    File "C:\Python27\lib\site-packages\easyprocess\__init__.py", line 202, in check_installed 
    raise EasyProcessCheckInstalledError(self) 
EasyProcessCheckInstalledError: cmd=['Xephyr', '-help'] 
OSError=[Error 2] The system cannot find the file specified 
Program install error! ` 
+1

PyVirtualDisplay requiere Xephyr y Xvfb, que parecen ser puramente Linux servicios. Busqué una pantalla virtual para Windows, pero no pude encontrar nada adecuado. –

+1

Jason, gracias! Yo estaba buscando también. Finalmente terminé con HtmlUnit para proceder con un enfoque menos GUI. ¡Gracias! –

Respuesta

8

Firefox (y otros navegadores gráficos) requieren una pantalla X. Puede usar uno virtual con la ayuda de PyVirtualDisplay:

from pyvirtualdisplay import Display 
display = Display(visible=0, size=(1024, 768)) 
display.start() 

browser = webdriver.Firefox() 
... more selenium code ... 

display.stop() 

Aparte de PyVirtualDisplay, también tendrá sus dependencias y xfvb Xephyr (en debian: apt-get install -y xvfb xserver-xephyr)

+0

Gracias por la sugerencia. Estoy en Windows XP. Instalé el módulo PyVirtualDisplay y uso el código actualizado en mi publicación inicial bajo EDITAR. Sin embargo, recibo esos errores como se menciona en la publicación original. ¿Cualquier sugerencia? –

+0

Instalé el módulo EasyProcess y el viejo error se ha ido. Ahora dice 'Archivo" C: \ Python27 \ lib \ site-packages \ pyvirtualdisplay \ abstractdisplay.py ", línea 2, en de la ruta de acceso de importación ImportError: Ningún módulo llamado path' ¿Dónde descargo el módulo Path para Python ¿de? Google-ing no me ayudó. o no lo busqué en Google de manera efectiva –

+0

Incluso ahora logré obtener el módulo Path de "http://pypi.python.org/pypi/path.py/2.2" pero luego cuando ejecuté el código (que EDITé en mi publicación original), sigo recibiendo errores editados en la publicación original –

Cuestiones relacionadas