首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高并发,selenium chromedriver进程不关闭(java)

高并发,selenium chromedriver进程不关闭(java)
EN

Stack Overflow用户
提问于 2018-03-08 11:40:28
回答 3查看 701关注 0票数 0

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

代码语言:javascript
复制
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;
    }
}
EN

回答 3

Stack Overflow用户

发布于 2018-03-08 14:37:22

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

代码语言:javascript
复制
pkill chrome

将其保存在ubuntu机器上的shell文件中。调用driver.quit()后远程调用;

票数 0
EN

Stack Overflow用户

发布于 2018-03-08 15:33:06

有几件事你需要注意,如下所示:

  • 正如您在有关concurrency的问题中提到的,Selenium本身可能不是最合适的。你需要使用look into 或,它们与Selenium的集成非常完美。
  • 在你的脚本中有一些从未使用过的冗余代码,你可以考虑删除它们:

interval);

  • Your = ( webDriverWait )新的驱动程序(driver,timeOutInSeconds,interval);

  • Your程序永远不会在catch{}中移动,因为不会引发任何异常。因此,PageSource永远不会在console.

  • Functionally,driver.close();driver.quit()中打印出来,听起来很相似,但它们之间有很大的区别,您需要根据自己的用例/要求来使用它们。你会发现一个详细的讨论,你的程序成功地跨越了一个新的ChromeDriver进程和ChromeBrowser实例,在你的finally{}块中,你只需要调用driver.quit(),如下所示:

最后,{ driver.quit();}

  • 如果你仍然发现悬空的ChromeDriver进程,你可能需要引入一个额外的步骤来清理它们。您将找到详细的讨论here.
票数 0
EN

Stack Overflow用户

发布于 2018-04-26 09:15:37

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

在我们的例子中,修复方法是删除no-sandbox选项。不推荐使用此选项,而且我们一开始就不应该使用它。这是一个愚蠢的复制/粘贴的web示例。删除该选项后,所有进程都将关闭。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49165005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档