communiqué de Sélénium chromedriver.exe à partir de la mémoire
- Je configurer un code python pour exécuter le Sélénium chromedriver.exe
. À la fin de la course j'ai browser.close()
pour fermer l'instance. (browser = webdriver.Chrome()
) Je crois qu'il devrait libérer chromedriver.exe
de mémoire (je suis sur Windows 7). Cependant, après chaque essai, il y en a un chromedriver.exe
instance restent dans la mémoire. J'espère qu'il ya une manière que je peux écrire quelque chose en python pour tuer le chromedriver.exe
processus. Évidemment browser.close()
ne pas faire le travail. Merci.
- Bas de ligne...vous devez tuer les processus en quelque sorte parce que les concepteurs n'ont pas la construire. Tous les autres moyens pourraient quitter un processus en cours d'exécution et qui est assez pour justifier de le tuer.
- Comment Dois-je Tuer Le Chrome Pilote de Processeur En Utilisant le Sélénium découvrez ce simple exemple.
Vous devez vous connecter pour publier un commentaire.
par le Sélénium API, vous devriez vraiment appeler
browser.quit()
que cette méthode de fermer 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 lorsque vous essayez d'exécuter chromedriver tests de la plate-forme Java, où l'chromedriver.exe en fait existe encore, même après l'utilisation de
browser.quit()
. Pour contrer cela, nous avons créé un fichier de commandes similaire à celle ci-dessous, qui vient de forces fermé le processus.kill_chromedriver.chauve-souris
Depuis chromedriver.exe n'est pas un énorme programme et ne consomme pas beaucoup de mémoire, vous ne devriez pas avoir à exécuter ce à chaque fois, mais seulement quand il présente un problème. Par exemple lors de l'exécution de Projet->Nettoyer dans Eclipse.
quit
méthode, cela ne devrait pas être un problème. La Force de tuer le processus ne devrait être qu'un dernier recours, et votre réponse devrait le refléter.X
il en reste encore. c'est le UNIQUEMENT la raison pour ce fichier de commandes. Évidemmentquit
est le chemin à parcourir, mais dans mon exemple, si vous déboguez et arrêter l'exécution, elle n'a jamais atteint lequit
.I hope there is a way I can write something to kill the chromedriver.exe process.
. et oui, c'est sympa! Java ne le fait pas.quit()
ne fonctionne pas avec chromedriver. Si j'ai recours à un fichier de commandes pourtaskkill
chromedriver.exe il vaut mieux que je puisse l'exécuter avec la cible PID. Depuis que j'ai plusieurs chromedriver instances en cours d'exécution dans le même temps, j'ai envie de tuer ceux qui ont finit son travail./t
commutateur peut être transmis àtaskkill
afin de tuer encore en cours d'exécution chrome sous-processus lancé par chromedriver.browser.close()
va fermer la actuelle de chrome fenêtre.browser.quit()
devrait fermer toutes les fenêtres ouvertes, puis la sortie de webdriver.browser.quit()
ne fermez toutes les fenêtres ouvertes. Mais chromedriver.exe n'a pas quitté. Et il y a un message d'erreur 'InvalidURL: non numériques de port: port".browser = webdriver.Firefox()
. Les deuxbrowser.close()
etbrowser.quit()
serait de fermer toutes les fenêtres et de libérer de la mémoire. Cependant chromedriver ne ferais pas la même.Théoriquement, l'appel de navigateur.Arrêter de fermer tous les onglets du navigateur et de tuer le processus.
Cependant, dans mon cas, je n'étais pas en mesure de le faire depuis que j'ai l'exécution de plusieurs tests en parallèle, je n'ai pas voulu faire un test pour fermer les fenêtres pour les autres. Par conséquent, lors de mes tests de fin de l'exécution, il ya encore beaucoup de "chromedriver.exe" les processus de la gauche en cours d'exécution.
Afin de surmonter cela, j'ai écrit un simple nettoyage de code (C#):
J'ai eu du succès lors de l'utilisation de
driver.close()
avantdriver.quit()
. J'étais auparavant uniquement à l'aide dedriver.quit()
.C'est un peu étrange, mais ça fonctionne pour moi. J'ai eu le même problème, après quelques recherches, j'ai trouvé qu'il y avait encore de l'INTERFACE utilisateur l'action se passe dans le navigateur (l'URL de chargement ou de faire), quand j'ai frappé
WebDriver.Quit()
.La solution pour moi (bien que très méchant), était d'ajouter un
Sleep()
de 3 secondes avant d'appeler Quit().WebDriver.Quit()
aussi bien avant, mais c'était parfois en laissant un chrome.exe processus vivant. Aussi j'imagine que ça se passe pas sur tous les systèmes d'exploitation.Cette réponse est de savoir comment éliminer correctement le pilote en C#
Si vous souhaitez utiliser un bon "mécanisme qui devrait être utilisé pour "nettoyer" après l'exécution de
ChromeDriver
vous devez utiliserIWebDriver.Dispose();
J'ai l'habitude de mettre en œuvre
IDisposable
de la classe qui s'occupe deIWebDriver
et de l'utiliser comme:
Espère que cela vous fait gagner un certain temps
using (var driver = new ChromeDriver()) { //my code here }
Parfois, pas toujours, "quelque chose" (je ne sais quoi??) il arrive etchromedriver.exe
est encore inédit en fonction de mon gestionnaire des tâches.Code c#
en utilisant le Système.Diagnostics;
en utilisant le Système.De gestion;
et cette fonction
Appel
J'ai eu le même problème lors de l'exécution en Python et j'ai eu à exécuter manuellement 'killall" commande à tuer tous les processus. Cependant, lorsque j'ai mis en place le pilote à l'aide du Python contexte du protocole de gestion de tous les processus ont disparu. Il semble que l'interpréteur Python fait un très bon travail de nettoyage choses.
Ici est la mise en œuvre:
Et l'utilisation:
Je sais que c'est un peu une vieille question, mais je pensais que je partage ce qui a fonctionné pour moi. J'ai eu des problèmes avec Eclipse -- il ne serait pas tuer le processus, et donc j'ai eu un tas de fantôme processus de traîner après le test du code à l'aide de l'Éclipse coureur.
Ma solution était de lancer Eclipse en tant qu'administrateur. Qu'il fixe pour moi. Semble que Windows n'a pas Eclipse permettant de fermer le processus qu'il a engendré.
chromedriver.exe
reste visible entre les processus du Gestionnaire des Tâches, peu importe, je démarrez Eclipse en tant qu'administrateur ou utilisateur normal. Il est possible que, dans mon cas, ceci est le problème, parce quechromedriver.exe
est de 32 bits et mon JRE 64 bits. Eclipse Néon.1a (4.6.1), Windows 8.1 Pro 64 bits, Java 1.8.0_92-b14.J'ai utilisé le ci-dessous dans nightwatch.js dans afterEach crochets.
.closeWindow() tout simplement de fermer la fenêtre. (Mais pas travailler pour de multiples fenêtres ouvertes).
Alors que .fin() se termine tout le reste de chrome processus.
Tuer Plusieurs Processus à Partir de la Ligne de Commande
La première chose que vous devez faire est d'ouvrir une invite de commande, puis utilisez la commande taskkill avec la syntaxe suivante:
Ces paramètres ne seront pas la force de le tuer tous les processus correspondant au nom de l'exécutable que vous spécifiez. Par exemple, de tuer tous les iexplore.exe processus, nous utiliserions:
Ainsi, vous pouvez utiliser les éléments suivants:
Fermer le navigateur (émule de frapper le bouton de fermeture)
De fermer le navigateur (émule en sélectionnant l'option quitter)
Quitter le navigateur (essaie de fermer tous les onglets, puis quitter)
Toutefois, si vous êtes ENCORE courir dans des problèmes avec la pendaison de cas (comme je l'ai été), vous pouvez aussi tuer l'instance. Pour ce faire, vous avez besoin de le PID du chrome instance.
Si il y a un chrome instance qui reste après que, je mange mon chapeau. 🙁
Code Python:
J'ai ce problème. Je soupçonne son dû à la version de Sérénité BDD et le Sélénium. Le chromedriver processus n'est jamais libère jusqu'à ce que l'ensemble de la suite de test se termine. Il y a seulement 97 tests, mais avoir 97 processus de manger de la mémoire d'un serveur qui n'a pas beaucoup de ressources peut avoir un effet sur les performances.
À l'adresse que j'ai fait 2 choses (ce qui est spécifique à windows).
avant chaque test (annotées avec @Avant) obtenir l'id de processus (PID) de la chromedriver avec:
après chaque test (annotée avec @Après) tuer le PID avec:
Je suis venu ici d'abord la pensée certes, cela aurait été répondu/résolu, mais après avoir lu toutes les réponses, j'ai été un peu surpris personne n'a essayé de les appeler tous les trois méthodes:
J'étais seulement ici pour chercher des réponses et n'avais pas l'intention d'en fournir un. Si la solution ci-dessus est basé sur mon expérience seulement. J'ai été en utilisant chrome pilote dans une console C# app et j'ai été capable de nettoyer la lenteur des processus qu'après l'appel de l'ensemble des trois méthodes.
Pour Ubuntu/Linux: -
la commande n'est
pkill
oukillall
.pkill
est généralement recommandé, car sur certains systèmes,killall
sera effectivement tuer tous les processus.Je suis à l'aide du Rapporteur avec directConnect. La désactivation du "--no-sandbox" option fixe le problème pour moi.
Note: Maintenant, si nous voyons le gestionnaire des tâches, vous ne trouverez pas n'importe quel pilote ou chrome processus toujours en suspens
J'ai regardé toutes les réponses et de les avoir tous testés. J'ai compilé tout dans une Sécurité de fermeture'. Dans c#
REMARQUE vous pouvez modifier le paramètre de IModule application à celui de l'actuel pilote.