J'ai mis en place un code python pour exécuter Selenium chromedriver.exe
. À la fin de l'exécution, je dois browser.close()
fermer l'instance. ( browser = webdriver.Chrome()
) Je pense qu'il devrait sortir chromedriver.exe
de la mémoire (je suis sous Windows 7). Cependant, après chaque exécution, il reste une chromedriver.exe
instance dans la mémoire. J'espère qu'il existe un moyen d'écrire quelque chose en python pour tuer le chromedriver.exe
processus. Il browser.close()
ne fait évidemment pas le travail. Merci.
102
Réponses:
par l'API Selenium, vous devriez vraiment appeler
browser.quit()
car cette méthode fermera toutes les fenêtres et tue le processus. Vous devriez toujours utiliserbrowser.quit()
.Cependant : sur mon lieu de travail, nous avons remarqué un énorme problème en essayant d'exécuter des tests chromedriver sur la plate-forme Java, où le chromedriver.exe existe encore même après utilisation
browser.quit()
. Pour contrer cela, nous avons créé un fichier batch similaire à celui ci-dessous, qui force simplement la fermeture des processus.kill_chromedriver.bat
Puisque chromedriver.exe n'est pas un programme volumineux et ne consomme pas beaucoup de mémoire, vous ne devriez pas avoir à l'exécuter à chaque fois, mais uniquement lorsque cela pose un problème. Par exemple, lors de l'exécution de Project-> Clean dans Eclipse.
la source
quit
méthode, cela ne devrait pas être un problème. La suppression forcée des processus ne devrait être qu’un dernier recours, et votre réponse devrait refléter cela.X
il reste. c'est la SEULE raison de ce fichier de commandes. C'est évidemmentquit
la voie à suivre, mais dans mon exemple, si vous déboguez et arrêtez l'exécution - il n'atteint jamais lequit
.I hope there is a way I can write something to kill the chromedriver.exe process.
. et oui, c'est sympa! Java ne fait pas çabrowser.close()
fermera uniquement la fenêtre Chrome actuelle.browser.quit()
devrait fermer toutes les fenêtres ouvertes, puis quitter Webdriver.la source
browser.quit()
a fermé toutes les fenêtres ouvertes. Mais chromedriver.exe n'a pas été quitté. Et il y avait un message d'erreur 'InvalidURL: port non numérique:' port ''.browser = webdriver.Firefox()
. Les deuxbrowser.close()
etbrowser.quit()
fermerait toutes les fenêtres et la mémoire de sortie. Cependant, chromedriver ne ferait pas la même chose.Théoriquement, appeler browser.Quit fermera tous les onglets du navigateur et tuera le processus.
Cependant, dans mon cas, je n'ai pas pu le faire - puisque j'exécute plusieurs tests en parallèle, je ne voulais pas qu'un test ferme les fenêtres à d'autres. Par conséquent, lorsque mes tests se terminent, il reste encore de nombreux processus "chromedriver.exe" en cours d'exécution.
Afin de surmonter cela, j'ai écrit un code de nettoyage simple (C #):
la source
J'ai eu du succès lors de l'utilisation
driver.close()
avantdriver.quit()
. J'utilisais auparavant uniquementdriver.quit()
.la source
la source
C'est un peu étrange mais ça marche pour moi. J'ai eu le même problème, après quelques recherches, j'ai trouvé qu'il y avait encore une action d'interface utilisateur en cours dans le navigateur (chargement d'URL ou plus), lorsque j'ai frappé
WebDriver.Quit()
.La solution pour moi (bien que très désagréable) était d'ajouter
Sleep()
3 secondes avant d'appeler Quit ().la source
WebDriver.Quit()
aussi avant, mais parfois il laissait un processus chrome.exe en vie. De plus, je suppose que cela ne se produit pas sur tous les systèmes d'exploitation.Cette réponse est de savoir comment supprimer correctement le pilote en C #
Si vous souhaitez utiliser un mécanisme `` approprié '' qui devrait être utilisé pour `` ranger '' après l'exécution,
ChromeDriver
vous devez utiliserIWebDriver.Dispose();
J'implémente généralement
IDisposable
sur la classe qui traiteIWebDriver
et utilisez-le comme:
J'espère que cela vous fera gagner du temps
la source
using (var driver = new ChromeDriver()) { //my code here }
Parfois, pas toujours, "quelque chose" (je ne sais pas quoi ??) se produit etchromedriver.exe
n'est toujours pas publié selon mon gestionnaire de tâches.Tuer plusieurs processus à partir de la ligne de commande La première chose à faire est d'ouvrir une invite de commande, puis d'utiliser la commande taskkill avec la syntaxe suivante:
Ces paramètres tueront de force tout processus correspondant au nom de l'exécutable que vous spécifiez. Par exemple, pour tuer tous les processus iexplore.exe, nous utiliserions:
la source
Code c #
en utilisant System.Diagnostics;
en utilisant System.Management;
et cette fonction
Appel
la source
J'ai eu le même problème lors de son exécution en Python et j'ai dû exécuter manuellement la commande «killall» pour tuer tous les processus. Cependant, lorsque j'ai implémenté le pilote à l'aide du protocole de gestion de contexte Python , tous les processus avaient disparu. Il semble que l'interpréteur Python fasse un très bon travail de nettoyage.
Voici la mise en œuvre:
Et l'utilisation:
la source
Ainsi, vous pouvez utiliser ce qui suit:
Fermez le navigateur (émule le fait d'appuyer sur le bouton de fermeture)
Quittez le navigateur (émule la sélection de l'option Quitter)
Quittez le navigateur (essaie de fermer chaque onglet, puis quittez)
Cependant, si vous rencontrez TOUJOURS des problèmes avec des instances suspendues (comme je l'étais), vous voudrez peut-être également tuer l'instance. Pour ce faire, vous avez besoin du PID de l'instance Chrome.
S'il reste une instance de chrome après cela, je mangerai mon chapeau. :(
la source
Code Python:
la source
Je sais que c'est un peu une vieille question, mais j'ai pensé partager ce qui a fonctionné pour moi. J'avais des problèmes avec Eclipse - cela ne tuerait pas les processus, et j'ai donc eu un tas de processus fantômes qui traînaient après avoir testé le code à l'aide du runner Eclipse.
Ma solution était d'exécuter Eclipse en tant qu'administrateur. Cela m'a arrangé. Il semble que Windows n'autorisait pas Eclipse à fermer le processus qu'il a engendré.
la source
chromedriver.exe
reste visible parmi les processus du gestionnaire de tâches, peu importe que je lance Eclipse en tant qu'administrateur ou utilisateur normal. Il est possible que dans mon cas, ce soit le problème, carchromedriver.exe
c'est 32 bits et mon JRE est 64 bits. Eclipse Neon.1a (4.6.1), Windows 8.1 Pro 64 bits, Java 1.8.0_92-b14.J'ai utilisé ce qui suit dans nightwatch.js dans afterEach hooks.
.closeWindow () ferme simplement la fenêtre. (Mais ne fonctionnera pas pour plusieurs fenêtres ouvertes). Alors que .end () met fin à tous les processus de chrome restants.
la source
J'ai ce problème. Je soupçonne que c'est dû à la version de Serenity BDD et Selenium. Le processus chromedriver ne se libère jamais tant que la suite de tests n'est pas terminée. Il n'y a que 97 tests, mais 97 processus consomment la mémoire d'un serveur qui n'a pas beaucoup de ressources peut avoir un impact sur les performances.
Pour aborder j'ai fait 2 choses (ceci est spécifique à Windows).
avant chaque test (annoté avec @Before), obtenez l'identifiant du processus (PID) du processus chromedriver avec:
après chaque test (annoté avec @After), tuez le PID avec:
la source
Je suis venu ici au départ en pensant que cela aurait sûrement été répondu / résolu, mais après avoir lu toutes les réponses, j'ai été un peu surpris que personne n'ait essayé d'appeler les trois méthodes ensemble:
Je n'étais ici que pour chercher des réponses et je n'avais pas l'intention d'en fournir une. La solution ci-dessus est donc basée uniquement sur mon expérience. J'utilisais le pilote chrome dans une application console C # et j'ai pu nettoyer les processus persistants uniquement après avoir appelé les trois méthodes ensemble.
la source
Pour les utilisateurs d'Ubuntu / Linux: - la commande est soit
pkill
oukillall
.pkill
est généralement recommandé, car sur certains systèmes, ilkillall
va en fait tuer tous les processus.la source
J'utilise Protractor avec directConnect. La désactivation de l'option "--no-sandbox" a résolu le problème pour moi.
la source
Remarque: maintenant, si nous voyons le gestionnaire de tâches, vous ne trouverez aucun pilote ou processus chrome toujours suspendu
la source
J'ai regardé toutes les réponses et les ai toutes testées. Je les ai presque tous rassemblés en un seul sous forme de «fermeture de sécurité». Ceci en c #
REMARQUE vous pouvez changer le paramètre de l'application IModule à celui du pilote réel.
la source
Observé sur la version 3.141.0:
Si vous initialisez votre ChromeDriver avec seulement ChromeOptions, quit () ne fermera pas chromedriver.exe.
Si vous créez et transmettez un ChromeDriverService, quit () fermera correctement chromedriver.exe.
la source
J'utilise simplement dans chaque test une méthode tearDown () comme suit et je n'ai aucun problème.
Après avoir quitté l'instance de pilote, effacez-la du cache par driver = null
J'espère que la réponse à la question
la source
Il existe une autre méthode qui ne fonctionne que pour Windows, mais elle est désormais obsolète. cela fonctionne pour les versions précédentes de sélénium (cela fonctionne sur la version 3.11.0).
la source
Vous devez appliquer fermer avant d'arrêter
la source