¿Puede Selenium Webdriver abrir ventanas del navegador silenciosamente en el fondo?

Tengo un conjunto de pruebas de selenium que ejecuta muchas pruebas y en cada nueva prueba abre una ventana del navegador encima de cualquier otra ventana que tengo abierta. Muy discordante mientras trabajaba en un entorno local. ¿Alguna forma de decirles al selenium o al sistema operativo (MAC) que abran las ventanas en segundo plano?

Hay algunas maneras, pero no es un simple “establecer un valor de configuración”. A menos que invierta en un navegador sin cabeza, que no se ajusta a los requisitos de todos, es un poco complicado:

¿Cómo ocultar la ventana de Firefox (Selenium WebDriver)?

y

¿Es posible ocultar el navegador en Selenium RC?

Puedes ‘supuestamente’, pasar algunos parámetros a Chrome, específicamente: --no-startup-window

Tenga en cuenta que para algunos navegadores, especialmente IE, dañará sus pruebas para que no se ejecute en foco.

También puede hackear un poco con AutoIT, para ocultar la ventana una vez que se abre.

Si está utilizando el controlador web Selenium con Python, puede usar PyVirtualDisplay, un contenedor Python para Xvfb y Xephyr.

PyVirtualDisplay necesita Xvfb como una dependencia. En Ubuntu, primero instala Xvfb:

 sudo apt-get install xvfb 

luego instala PyVirtualDisplay desde Pypi:

 pip install pyvirtualdisplay 

Ejemplo de script de Selenium en Python en un modo sin cabeza con PyVirtualDisplay:

 #!/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() 

EDITAR La respuesta inicial se publicó en 2014 y ahora estamos en la cúspide de 2018. Al igual que todo lo demás, los navegadores también han avanzado. Chrome ahora tiene una versión completamente sin cabeza que elimina la necesidad de utilizar bibliotecas de terceros para ocultar la ventana de la interfaz de usuario. El código de muestra es el siguiente:

 from selenium import webdriver from selenium.webdriver.chrome.options import Options CHROME_PATH = '/usr/bin/google-chrome' CHROMEDRIVER_PATH = '/usr/bin/chromedriver' WINDOW_SIZE = "1920,1080" chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument("--window-size=%s" % WINDOW_SIZE) chrome_options.binary_location = CHROME_PATH driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, chrome_options=chrome_options ) driver.get("https://www.google.com") driver.get_screenshot_as_file("capture.png") driver.close() 

Chrome 57 tiene una opción para pasar el indicador sin cabeza, lo que hace que la ventana sea invisible.

Esta bandera es diferente de la ventana –no-startup-como la última no abre una ventana. Se usa para alojar aplicaciones en segundo plano, como dice esta página .

Código de Java para pasar la bandera a Selenium webdriver (ChromeDriver):

 ChromeOptions options = new ChromeOptions(); options.addArguments("--headless"); ChromeDriver chromeDriver = new ChromeDriver(options); 

Sugiero usar Phantom Js para obtener más información que necesita para visitar el sitio web oficial de Phantom.

Por lo que sé, PhantomJS solo funciona con Firefox.

después de descargar PhantomJs.exe, debe importar a su proyecto como puede ver en la imagen siguiente Phantomjs está dentro de la biblioteca >> Biblioteca >> phantomjs.exe enter image description here

Ahora todo lo que tiene que hacer dentro de su código de Selenio es cambiar la línea

 browser = webdriver.Firefox() 

Para algo como

 import os path2phantom = os.getcwd() + "\common\Library\phantomjs.exe" browser = webdriver.PhantomJS(path2phantom) 

El camino a phantomjs puede ser diferente … cambia como quieras 🙂

Eso es todo, funcionó para mí. y definitivamente él trabajará para ti, Saludos

En Windows puede usar win32gui:

 import win32gui import subprocess class HideFox: def __init__(self, exe='firefox.exe'): self.exe = exe self.get_hwnd() def get_hwnd(self): win_name = get_win_name(self.exe) self.hwnd = win32gui.FindWindow(0,win_name) def hide(self): win32gui.ShowWindow(self.hwnd, 6) win32gui.ShowWindow(self.hwnd, 0) def show(self): win32gui.ShowWindow(self.hwnd, 5) win32gui.ShowWindow(self.hwnd, 3) def get_win_name(exe): '''simple function that gets the window name of the process with the given name''' info = subprocess.STARTUPINFO() info.dwFlags |= subprocess.STARTF_USESHOWWINDOW raw=subprocess.check_output('tasklist /v /fo csv', startupinfo=info).split('\n')[1:-1] for proc in raw: try: proc=eval('['+proc+']') if proc[0]==exe: return proc[8] except: pass raise ValueError('Could not find a process with name '+exe) 

Ejemplo:

 hider=HideFox('firefox.exe') #can be anything, eq: phantomjs.exe, notepad.exe ... #To hide the window hider.hide() #To show again hider.show() 

Sin embargo, hay un problema con esta solución: el uso del método send_keys hace que aparezca la ventana. Puede manejarlo usando javascript que no muestra ventana:

 def send_keys_without_opening_window(id_of_the_element, keys) YourWebdriver.execute_script("document.getElementById('" +id_of_the_element+"').value = '"+keys+"';") 

Para ejecutar sin ningún navegador, puede ejecutarlo en modo sin cabeza .

Te muestro un ejemplo en Python que funciona para mí en este momento

 from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument("headless") self.driver = webdriver.Chrome(executable_path='/Users/${userName}/Drivers/chromedriver', chrome_options=options) 

También le agrego un poco más de información sobre esto en el sitio web oficial de Google https://developers.google.com/web/updates/2017/04/headless-chrome

Desde Chrome 57 tienes el argumento sin cabeza:

 var options = new ChromeOptions(); options.AddArguments("headless"); using (IWebDriver driver = new ChromeDriver(options)) { // the rest of your test } 

El modo sin cabeza de Chrome tiene un rendimiento del 30,97% mejor que la versión de la interfaz de usuario. El otro controlador sin cabeza PhantomJS ofrece un 34.92% mejor que el modo sin cabeza de Chrome.

PhantomJSDriver

 using (IWebDriver driver = new PhantomJSDriver()) { // the rest of your test } 

El modo sin cabeza de Mozilla Firefox funciona un 3.68% mejor que la versión de UI. Esto es una decepción ya que el modo sin cabeza de Chrome logra un tiempo> 30% mejor que el del UI. El otro controlador sin cabeza PhantomJS ofrece un 34.92% mejor que el modo sin cabeza de Chrome. Sorprendentemente para mí, el navegador Edge los supera a todos.

 var options = new FirefoxOptions(); options.AddArguments("--headless"); { // the rest of your test } 

Esto está disponible en Firefox 57+

El modo sin cabeza de Mozilla Firefox funciona un 3.68% mejor que la versión de UI. Esto es una decepción ya que el modo sin cabeza de Chrome logra un tiempo> 30% mejor que el del UI. El otro controlador sin cabeza PhantomJS ofrece un 34.92% mejor que el modo sin cabeza de Chrome. Sorprendentemente para mí, el navegador Edge los supera a todos.

Nota: ¡PhantomJS ya no se mantiene!

En * nix, también puede ejecutar un servidor X sin cabeza como Xvfb y señalar con él la variable DISPLAY:

¿Servidor Fake X para probar?

Aquí hay una solución .net que funcionó para mí:

Descargue PhantomJs aquí http://phantomjs.org/download.html

Copie el archivo .exe de la carpeta bin en la descarga y péguelo en la carpeta bin debug / release de su proyecto de Visual Studio.

Agregar esto usando

 using OpenQA.Selenium.PhantomJS; 

En su código abra el controlador de esta manera:

 PhantomJSDriver driver = new PhantomJSDriver(); using (driver) { driver.Navigate().GoToUrl("http://testing-ground.scraping.pro/login"); //your code here }