Eu configurei um código python para executar o Selenium chromedriver.exe
. No final da execução, tenho browser.close()
que fechar a instância. ( browser = webdriver.Chrome()
) Acredito que deveria liberar chromedriver.exe
da memória (estou no Windows 7). No entanto, após cada execução, uma chromedriver.exe
instância permanece na memória. Espero que haja uma maneira de escrever algo em python para encerrar o chromedriver.exe
processo. Obviamente browser.close()
, não faz o trabalho. Obrigado.
102
Respostas:
pela API Selenium, você realmente deve chamar,
browser.quit()
pois esse método fechará todas as janelas e encerrará o processo. Você ainda deve usarbrowser.quit()
.No entanto : Em meu local de trabalho, notamos um grande problema ao tentar executar testes de chromedriver na plataforma Java, onde o chromedriver.exe realmente ainda existe mesmo após o uso
browser.quit()
. Para evitar isso, criamos um arquivo batch semelhante a este abaixo, que apenas força o fechamento dos processos.kill_chromedriver.bat
Como o chromedriver.exe não é um programa muito grande e não consome muita memória, você não deve ter que executá-lo todas as vezes, mas apenas quando apresentar um problema. Por exemplo, ao executar Projeto-> Limpar no Eclipse.
fonte
quit
método corretamente , isso não deve ser um problema. Eliminar os processos à força deve ser apenas o último recurso, e sua resposta deve refletir isso.X
ele permanecerá. esse é o ÚNICO motivo para esse arquivo em lote. Obviamentequit
é o caminho a percorrer, no entanto, no meu exemplo, se você depurar e interromper a execução - nunca chegará aoquit
.I hope there is a way I can write something to kill the chromedriver.exe process.
. e sim, isso é bom! Java não faz issobrowser.close()
irá fechar apenas a janela atual do Chrome.browser.quit()
deve fechar todas as janelas abertas e sair do webdriver.fonte
browser.quit()
fechou todas as janelas abertas. Mas chromedriver.exe não foi encerrado. E havia uma mensagem de erro 'InvalidURL: porta não numérica:' porta ''.browser = webdriver.Firefox()
. Ambosbrowser.close()
ebrowser.quit()
fecham todas as janelas e liberam memória. No entanto, o chromedriver não faria o mesmo.Teoricamente, chamar browser.Quit fechará todas as guias do navegador e encerrará o processo.
No entanto, no meu caso, não fui capaz de fazer isso - como estava executando vários testes em paralelo, não queria fazer um teste para fechar janelas para outros. Portanto, quando meus testes terminarem de ser executados, ainda haverá muitos processos "chromedriver.exe" em execução.
Para superar isso, escrevi um código de limpeza simples (C #):
fonte
Tive sucesso ao usar
driver.close()
antesdriver.quit()
. Antes eu estava apenas usandodriver.quit()
.fonte
fonte
É meio estranho, mas funciona para mim. Eu tive o problema semelhante, após algumas pesquisas, descobri que ainda havia uma ação de IU em andamento no navegador (carregamento de URL ou algo assim), quando eu bati
WebDriver.Quit()
.A solução para mim (embora muito desagradável) foi adicionar um
Sleep()
de 3 segundos antes de chamar Quit ().fonte
WebDriver.Quit()
antes, mas às vezes deixava um processo chrome.exe ativo. Além disso, acho que não está acontecendo em todos os sistemas operacionais.Esta resposta é como descartar corretamente o driver em C #
Se você quiser usar um mecanismo 'adequado' que deve ser usado para 'arrumar' após a execução,
ChromeDriver
você deve usarIWebDriver.Dispose();
Eu geralmente implemento
IDisposable
na aula que lida comIWebDriver
e usá-lo como:
Espero que isso te economize algum tempo
fonte
using (var driver = new ChromeDriver()) { //my code here }
Às vezes, nem sempre, "algo" (não sei o que ??) acontece echromedriver.exe
ainda não foi lançado de acordo com meu gerenciador de tarefas.Elimine vários processos da linha de comando A primeira coisa que você precisa fazer é abrir um prompt de comando e usar o comando taskkill com a seguinte sintaxe:
Esses parâmetros eliminarão à força qualquer processo que corresponda ao nome do executável que você especificar. Por exemplo, para matar todos os processos iexplore.exe, usaríamos:
fonte
Código c #
using System.Diagnostics;
using System.Management;
e esta função
Chamando
fonte
Eu tive o mesmo problema ao executá-lo em Python e tive que executar manualmente o comando 'killall' para encerrar todos os processos. No entanto, quando implementei o driver usando o protocolo de gerenciamento de contexto Python , todos os processos foram eliminados. Parece que o interpretador Python faz um ótimo trabalho de limpeza.
Aqui está a implementação:
E o uso:
fonte
Portanto, você pode usar o seguinte:
Feche o navegador (emula o toque no botão Fechar)
Saia do navegador (emula a seleção da opção sair)
Saia do navegador (tenta fechar todas as guias e depois sai)
No entanto, se você AINDA está tendo problemas com instâncias suspensas (como eu), você também pode querer matar a instância. Para fazer isso, você precisa do PID da instância do Chrome.
Se sobrar uma instância do Chrome depois disso, comerei meu chapéu. :(
fonte
Código Python:
fonte
Eu sei que esta é uma questão antiga, mas pensei em compartilhar o que funcionou para mim. Eu estava tendo problemas com o Eclipse - ele não mataria os processos, então eu tinha um monte de processos fantasmas pendurados depois de testar o código usando o executor do Eclipse.
Minha solução foi executar o Eclipse como administrador. Isso resolveu para mim. Parece que o Windows não estava permitindo que o Eclipse fechasse o processo que ele gerou.
fonte
chromedriver.exe
permanece visível entre os processos do Gerenciador de Tarefas, não importa se eu iniciei o Eclipse como administrador ou usuário normal. É possível que no meu caso seja esse o problema, porquechromedriver.exe
é de 32 bits e meu JRE é de 64 bits. Eclipse Neon.1a (4.6.1), Windows 8.1 Pro 64 bits, Java 1.8.0_92-b14.Eu usei o seguinte em nightwatch.js em ganchos afterEach.
.closeWindow () simplesmente fecha a janela. (Mas não vai funcionar para várias janelas abertas). Enquanto .end () termina todos os processos de cromo restantes.
fonte
Eu tenho esse problema. Eu suspeito que seja devido à versão do Serenity BDD e Selenium. O processo chromedriver nunca é liberado até que todo o conjunto de testes seja concluído. Existem apenas 97 testes, mas ter 97 processos consumindo a memória de um servidor que não tem muitos recursos pode estar afetando o desempenho.
Para resolver, fiz 2 coisas (isso é específico para o Windows).
antes de cada teste (anotado com @Before) obtenha o ID do processo (PID) do processo chromedriver com:
após cada teste (anotado com @After) elimine o PID com:
fonte
Eu vim aqui inicialmente pensando que isso teria sido respondido / resolvido, mas depois de ler todas as respostas, fiquei um pouco surpreso por ninguém tentar chamar todos os três métodos juntos:
Eu estava aqui apenas para procurar respostas e não tinha a intenção de fornecer uma. Portanto, a solução acima é baseada apenas na minha experiência. Eu estava usando o driver do Chrome em um aplicativo de console C # e consegui limpar os processos remanescentes somente depois de chamar todos os três métodos juntos.
fonte
Para usuários do Ubuntu / Linux: - o comando é
pkill
oukillall
.pkill
geralmente é recomendado, pois em alguns sistemas,killall
irá realmente matar todos os processos.fonte
Estou usando o Protractor com directConnect. Desativar a opção "--no-sandbox" corrigiu o problema para mim.
fonte
Nota: Agora, se virmos o gerenciador de tarefas, você não encontrará nenhum driver ou processo de cromo ainda travado
fonte
Eu olhei todas as respostas e testei todas elas. Eu praticamente os compilei todos em um como um 'fechamento de segurança'. Isso em c #
NOTA você pode alterar o parâmetro do aplicativo IModule para o do driver real.
fonte
Observado na versão 3.141.0:
Se você inicializar seu ChromeDriver apenas com ChromeOptions, quit () não fechará chromedriver.exe.
Se você criar e passar um ChromeDriverService, quit () fechará o chromedriver.exe corretamente.
fonte
Eu simplesmente uso em cada teste um método tearDown () como a seguir e não tenho nenhum problema.
Depois de sair da instância do driver, limpe-a do cache por driver = null
Espero que a resposta a pergunta
fonte
Existe outra maneira que está funcionando apenas para o Windows, mas agora está obsoleta. ele funciona para versões anteriores do selenium (funciona na versão 3.11.0).
fonte
Você deve aplicar antes de sair
fonte