高并发,硒chromedriver过程不关闭(java)

时间:2018-03-08 03:40:28

标签: selenium concurrency process selenium-chromedriver exit

我设置了一个java HttpServlet代码来运行Selenium chromedriver(Ubuntu 16.4),如果同时调用超过30次,我发现一些chromedriver进程不退出,并且异常显示“没有这样的会话”,我希望有一种方法可以退出所有的chromedriver进程并提高并发性。谢谢

WebDriver driver = null;
try {
    DesiredCapabilities caps = DesiredCapabilities.chrome();
    ChromeOptions options = new ChromeOptions();

    options.addArguments("ignore-certificate-errors");

    options.addArguments("disable-gpu");
    options.addArguments("no-sandbox");         
    options.addArguments("--disable-impl-side-painting");//Paint content on the main thread instead of the compositor thread.

    options.addArguments("--test-type", "--start-maximized", "no-default-browser-check"); 
    caps.setCapability("chrome.switches", Arrays.asList("--start-maximized"));
    caps.setCapability(ChromeOptions.CAPABILITY, options);
    driver = new ChromeDriver(caps);

    driver.get(url);
    webDriverWait = (WebDriverWait) new WebDriverWait(driver, timeOutInSeconds, interval);

} catch (Exception e) { //can not catch
    PageSource = e.getMessage();            
    System.err.println(PageSource);
} finally {
    if(null != driver){
        driver.close();
        driver.quit();
        driver = null;
    }
}

3 个答案:

答案 0 :(得分:0)

使用进程杀手从OS进程调度程序中清除孤立的chromedriver.exe。前 -

pkill chrome

将其保存在ubuntu计算机上的shell文件中。调用driver.quit();

后远程调用它

答案 1 :(得分:0)

您需要注意以下几项事项:

  • 正如您在关于并发性的问题中提到的那样, Selenium 可能不是最合适的。您需要查看JMeterSoapUI,它们与 Selenium 集成非常完美。
  • 您的脚本中有一些永远不会使用的冗余代码,您可以考虑删除它们:

    .env
  • 您的计划永远不会在webDriverWait = (WebDriverWait) new WebDriverWait(driver, timeOutInSeconds, interval); 内移动,因为不会有任何例外。因此, PageSource 永远不会在控制台中打印出来。

  • 从功能上讲,catch{}driver.close();听起来相似,但它们之间存在显着差异,您需要根据用例 / 要求使用它们 。您会找到详细的讨论here
  • 如果您的程序成功跨越了新的 ChromeDriver 进程和 ChromeBrowser 实例,则在driver.quit()块中,您只需要调用{{1}如下:

    finally{}
  • 如果您仍然发现悬空 ChromeDriver 进程,则可能需要采取额外步骤来清理它们。您将找到详细的讨论here

答案 2 :(得分:0)

使用Chrome 66和chromedriver 2.38,我们在Windows机器上遇到了类似的问题。在测试套件之后,chromedriver将正常关闭(driver.quit),但仍有许多Chrome.exe进程正在运行。

在我们的示例中,修复方法是删除 no-sandbox 选项。不建议使用此选项,我们不应该首先使用它。这是一个来自网络示例的愚蠢的复制/粘贴。删除选项后,所有进程都将关闭。

我建议您尝试删除选项列表中的 no-sandbox 参数。