Configuré un código de Python para ejecutar Selenium chromedriver.exe
. Al final de la ejecución, tengo browser.close()
que cerrar la instancia. ( browser = webdriver.Chrome()
) Creo que debería liberarse chromedriver.exe
de la memoria (estoy en Windows 7). Sin embargo, después de cada ejecución, queda una chromedriver.exe
instancia en la memoria. Espero que haya una forma de escribir algo en Python para matar el chromedriver.exe
proceso. Obviamente browser.close()
no hace el trabajo. Gracias.
102
Respuestas:
según la API de Selenium, debería llamar,
browser.quit()
ya que este método cerrará todas las ventanas y matará el proceso. Aún debe usarbrowser.quit()
.Sin embargo : en mi lugar de trabajo, hemos notado un gran problema al intentar ejecutar pruebas de chromedriver en la plataforma Java, donde el chromedriver.exe todavía existe incluso después de usarlo
browser.quit()
. Para contrarrestar esto, creamos un archivo por lotes similar al siguiente, que solo fuerza el cierre de los procesos.kill_chromedriver.bat
Dado que chromedriver.exe no es un programa enorme y no consume mucha memoria, no debería tener que ejecutar esto cada vez, sino solo cuando presenta un problema. Por ejemplo, al ejecutar Proyecto-> Limpiar en Eclipse.
fuente
quit
método, esto no debería ser un problema. La eliminación forzada de los procesos solo debería ser un último recurso, y su respuesta debería reflejar eso.X
en, todavía permanece. esa es la ÚNICA razón para este archivo por lotes. Obviamentequit
es el camino a seguir, sin embargo, en mi ejemplo, si depura y detiene la ejecución, nunca llega alquit
.I hope there is a way I can write something to kill the chromedriver.exe process.
. y sí, ¡eso es lindo! Java no hace esobrowser.close()
cerrará solo la ventana de Chrome actual.browser.quit()
debe cerrar todas las ventanas abiertas, luego salir de webdriver.fuente
browser.quit()
cerró todas las ventanas abiertas. Pero no se salió de chromedriver.exe. Y había un mensaje de error 'InvalidURL: nonnumeric port:' port ''.browser = webdriver.Firefox()
. Ambosbrowser.close()
ybrowser.quit()
cerrarían todas las ventanas y liberarían memoria. Sin embargo, chromedriver no haría lo mismo.En teoría, llamar a browser.Quit cerrará todas las pestañas del navegador y terminará el proceso.
Sin embargo, en mi caso no pude hacer eso, ya que ejecuté varias pruebas en paralelo, no quería hacer una prueba para cerrar ventanas a otras. Por lo tanto, cuando mis pruebas terminan de ejecutarse, todavía quedan muchos procesos "chromedriver.exe" en ejecución.
Para superar eso, escribí un código de limpieza simple (C #):
fuente
Tuve éxito al usar
driver.close()
antesdriver.quit()
. Anteriormente solo usabadriver.quit()
.fuente
fuente
Es un poco extraño pero me funciona. Tuve un problema similar, después de investigar un poco, descubrí que todavía había una acción de interfaz de usuario en el navegador (carga de URL más o menos), cuando presioné
WebDriver.Quit()
.La solución para mí (aunque muy desagradable) fue agregar una
Sleep()
de 3 segundos antes de llamar a Quit ().fuente
WebDriver.Quit()
antes, pero a veces dejaba vivo un proceso chrome.exe. Además, supongo que no está sucediendo en todos los sistemas operativos.Esta respuesta es cómo deshacerse correctamente del controlador en C #
Si desea utilizar un mecanismo 'adecuado' que debería utilizarse para 'ordenar' después de ejecutar
ChromeDriver
, debería utilizarIWebDriver.Dispose();
Normalmente lo implemento
IDisposable
en la clase que se ocupa deIWebDriver
y utilícelo como:
Espero que esto te ahorre algo de tiempo
fuente
using (var driver = new ChromeDriver()) { //my code here }
A veces, no siempre, "algo" (¿no sé qué?) sucede ychromedriver.exe
aún no se ha publicado según mi administrador de tareas.Elimine varios procesos desde la línea de comandos Lo primero que debe hacer es abrir un símbolo del sistema y luego usar el comando taskkill con la siguiente sintaxis:
Estos parámetros eliminarán por la fuerza cualquier proceso que coincida con el nombre del ejecutable que especifique. Por ejemplo, para eliminar todos los procesos iexplore.exe, usaríamos:
fuente
Código c #
utilizando System.Diagnostics;
utilizando System.Management;
y esta función
Vocación
fuente
Tuve el mismo problema al ejecutarlo en Python y tuve que ejecutar manualmente el comando 'killall' para matar todos los procesos. Sin embargo, cuando implementé el controlador usando el protocolo de administración de contexto de Python , todos los procesos desaparecieron. Parece que el intérprete de Python hace un buen trabajo limpiando las cosas.
Aquí está la implementación:
Y el uso:
fuente
Entonces, puedes usar lo siguiente:
Cerrar el navegador (emula presionar el botón de cierre)
Salir del navegador (emula la selección de la opción de salir)
Salir del navegador (intenta cerrar todas las pestañas y luego salir)
Sin embargo, si TODAVÍA tiene problemas con las instancias colgadas (como yo), es posible que también desee eliminar la instancia. Para hacer eso, necesita el PID de la instancia de Chrome.
Si queda una instancia de Chrome después de eso, me comeré mi sombrero. :(
fuente
Código Python:
fuente
Sé que esta es una pregunta algo antigua, pero pensé en compartir lo que funcionó para mí. Estaba teniendo problemas con Eclipse, no mataría los procesos, por lo que tenía un montón de procesos fantasmas dando vueltas después de probar el código usando el corredor de Eclipse.
Mi solución fue ejecutar Eclipse como administrador. Eso me lo arregló. Parece que Windows no permitía que Eclipse cerrara el proceso que generó.
fuente
chromedriver.exe
permanece visible entre los procesos del Administrador de tareas sin importar que inicie Eclipse como administrador o usuario normal. Es posible que en mi caso este sea el problema, porquechromedriver.exe
es de 32 bits y mi JRE es de 64 bits. Eclipse Neon.1a (4.6.1), Windows 8.1 Pro de 64 bits, Java 1.8.0_92-b14.He usado lo siguiente en nightwatch.js en afterEach hooks.
.closeWindow () simplemente cierra la ventana. (Pero no funcionará para varias ventanas abiertas). Mientras que .end () finaliza todos los procesos restantes de Chrome.
fuente
Tengo este problema. Sospecho que se debe a la versión de Serenity BDD y Selenium. El proceso de cromedriver nunca se libera hasta que finaliza todo el conjunto de pruebas. Solo hay 97 pruebas, pero el hecho de que 97 procesos consuman la memoria de un servidor que no tiene muchos recursos puede afectar el rendimiento.
Para abordar hice 2 cosas (esto es específico de Windows).
antes de cada prueba (anotado con @Before) obtenga el ID de proceso (PID) del proceso del controlador cromado con:
después de cada prueba (anotado con @After) elimine el PID con:
fuente
Vine aquí inicialmente pensando que seguramente esto se habría respondido / resuelto, pero después de leer todas las respuestas, me sorprendió un poco que nadie intentara reunir los tres métodos:
Solo estaba aquí para buscar respuestas y no tenía la intención de proporcionar una. Entonces, la solución anterior se basa solo en mi experiencia. Estaba usando el controlador de Chrome en una aplicación de consola C # y pude limpiar los procesos persistentes solo después de llamar a los tres métodos juntos.
fuente
Para usuarios de Ubuntu / Linux: - el comando es
pkill
okillall
.pkill
generalmente se recomienda, ya que en algunos sistemas,killall
realmente matará todos los procesos.fuente
Estoy usando Protractor con directConnect. La desactivación de la opción "--no-sandbox" solucionó el problema.
fuente
Nota: Ahora, si vemos el administrador de tareas, no encontrará ningún controlador o proceso de Chrome aún colgando.
fuente
He mirado todas las respuestas y las he probado todas. Prácticamente los recopilé todos en uno como un 'Cierre de seguridad'. Esto en c #
NOTA: puede cambiar el parámetro de la aplicación IModule al del controlador real.
fuente
Observado en la versión 3.141.0:
Si inicializa su ChromeDriver solo con ChromeOptions, quit () no cerrará chromedriver.exe.
Si crea y pasa un ChromeDriverService, quit () cerrará chromedriver.exe correctamente.
fuente
Simplemente uso en cada prueba un método tearDown () como sigue y no tengo ningún problema.
Después de salir de la instancia del controlador, límpiela de la caché con driver = null
Espero la respuesta a la pregunta
fuente
Hay otra forma que funciona solo para Windows, pero ahora está en desuso. funciona para versiones anteriores de selenio (funciona en la versión 3.11.0).
fuente
Debe aplicar cerca antes de dejar de fumar
fuente