【问题标题】:How to kill many geckodriver.exe processes?如何杀死许多 geckodriver.exe 进程?
【发布时间】:2016-11-20 09:27:57
【问题描述】:

我使用的是 Windows 10 pro x64、Firefox 50.x、Java 8、Selenium 3.0.1

public RemoteWebDriver remoteWebDriver;

//...

System.setProperty("webdriver.gecko.driver", browserWebDriverFilePath);
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
remoteWebDriver = new FirefoxDriver(capabilities);
remoteWebDriver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
remoteWebDriver.manage().window().maximize();

//...

remoteWebDriver.quit();

【问题讨论】:

    标签: selenium geckodriver


    【解决方案1】:

    从命令行运行:

    taskkill /F /IM geckodriver.exe
    

    或者更好的是,将它放在一个批处理文件中,并在每次要清理时运行该文件。

    如果需要,您也可以在开始运行之前从代码中执行此操作:

    boolean isDebug = java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments().toString().indexOf("-agentlib:jdwp") > 0;
    try {
        if (isDebug)
            Runtime.getRuntime().exec("taskkill /F /IM geckodriver.exe");
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    仅在调试时避免在并行运行时杀死从站上的实例。

    【讨论】:

      【解决方案2】:

      我最近在使用 webdriver 时遇到了这个问题,它导致了许多僵尸 geckodriver 进程。

      将 driver.quit() 放在 finally 块中可以解决这个问题。

      FirefoxOptions options = new FirefoxOptions();
      options.addArguments("--headless");
      WebDriver driver = new FirefoxDriver(options);
      
      try {
      
         .... 
      
      } finally {
         driver.quit();
      }
      

      【讨论】:

        【解决方案3】:

        如果 driver.Close() 和执行 driver.Quit(),这种方式不成功,而是用 driver.Quit() 覆盖 driver.Close()

        不使用终端执行,因为会将进程留在服务器中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-15
          • 1970-01-01
          • 1970-01-01
          • 2014-10-22
          • 2011-12-21
          • 2019-01-07
          相关资源
          最近更新 更多