태그 보관물: selenium-chromedriver

selenium-chromedriver

메모리에서 Selenium chromedriver.exe 해제 실행하기 위해 파이썬

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
}

이것이 시간을 절약하기를 바랍니다.