Selenium을 실행하기 위해 파이썬 코드를 설정했습니다 chromedriver.exe
. 실행이 끝나면 browser.close()
인스턴스를 닫아야합니다. ( browser = webdriver.Chrome()
) chromedriver.exe
메모리에서 해제되어야한다고 생각합니다 (Windows 7에 있습니다). 그러나 각 실행 후에는 하나의 chromedriver.exe
인스턴스가 메모리에 남아 있습니다. chromedriver.exe
프로세스 를 죽이기 위해 파이썬으로 무언가를 작성할 수있는 방법이 있기를 바랍니다 . 분명히 일을 browser.close()
하지 않습니다. 감사.
답변
Selenium API에 따라이 browser.quit()
메서드는 모든 창을 닫고 프로세스를 종료하므로 실제로 호출해야 합니다. 여전히 browser.quit()
.
그러나 : 제 직장에서 우리는 자바 플랫폼에서 chromedriver 테스트를 실행하려고 할 때 큰 문제를 발견했습니다. chromedriver.exe는 실제로 browser.quit()
. 이에 대응하기 위해 우리는 프로세스를 강제 종료하는 아래와 유사한 배치 파일을 만들었습니다.
kill_chromedriver.bat
@echo off
rem just kills stray local chromedriver.exe instances.
rem useful if you are trying to clean your project, and your ide is complaining.
taskkill /im chromedriver.exe /f
chromedriver.exe는 거대한 프로그램이 아니고 많은 메모리를 소비하지 않기 때문에 매번 실행할 필요는 없지만 문제가있을 때만 실행할 수 있습니다. 예를 들어 Eclipse에서 Project-> Clean을 실행할 때.
답변
browser.close()
현재 크롬 창만 닫습니다.
browser.quit()
열려있는 모든 창을 닫은 다음 webdriver를 종료해야합니다.
답변
이론적으로 browser.Quit을 호출하면 모든 브라우저 탭이 닫히고 프로세스가 종료됩니다.
그러나 제 경우에는 그렇게 할 수 없었습니다. 여러 테스트를 병렬로 실행했기 때문에 하나의 테스트에서 다른 사람에게 창을 닫고 싶지 않았습니다. 따라서 테스트 실행이 완료되면 여전히 많은 “chromedriver.exe”프로세스가 실행되고 있습니다.
이를 극복하기 위해 간단한 정리 코드 (C #)를 작성했습니다.
Process[] chromeDriverProcesses = Process.GetProcessesByName("chromedriver");
foreach(var chromeDriverProcess in chromeDriverProcesses)
{
chromeDriverProcess.Kill();
}
답변
driver.close()
이전에 사용할 때 성공했습니다 driver.quit()
. 이전에는 driver.quit()
.
답변
//Calling close and then quit will kill the driver running process.
driver.close();
driver.quit();
답변
좀 이상하지만 나를 위해 작동합니다. 비슷한 문제가 있었는데, 몇 가지 파고 들었을 때 WebDriver.Quit()
.
나를위한 해결책은 (매우 불쾌하지만) Sleep()
Quit ()를 호출하기 전에 3 초 를 추가하는 것이 었습니다 .
답변
이 답변은 C #에서 드라이버를 올바르게 처리하는 방법입니다.
실행 후 ‘정리’하는 데 사용해야하는 ‘적절한’메커니즘을 사용하려면 ChromeDriver
다음을 사용해야합니다. IWebDriver.Dispose();
관리되지 않는 리소스를 해제, 해제 또는 재설정하는 것과 관련된 응용 프로그램 정의 작업을 수행합니다. (IDisposable에서 상 속됨)
나는 일반적으로 IDisposable
다루는 클래스에서 구현합니다 .IWebDriver
public class WebDriverController : IDisposable
{
public IWebDriver Driver;
public void Dispose()
{
this.Driver.Dispose();
}
}
다음과 같이 사용하십시오.
using (var controller = new WebDriverController())
{
//code goes here
}
이것이 시간을 절약하기를 바랍니다.