我设置了一个java HttpServlet代码来运行Selenium chromedriver (Ubuntu16.4),如果同时调用超过30次,我发现有一些chromedriver进程没有退出,并且异常显示“没有这样的会话”,我希望有一种方法可以退出所有的chromedriver进程并引发concurrency.Thanks
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;
}
}发布于 2018-03-08 14:37:22
使用进程杀手从操作系统进程调度程序中清除孤立的chromedriver.exe。前-
pkill chrome将其保存在ubuntu机器上的shell文件中。调用driver.quit()后远程调用;
发布于 2018-03-08 15:33:06
有几件事你需要注意,如下所示:
interval);
catch{}中移动,因为不会引发任何异常。因此,PageSource永远不会在console.
driver.close();和driver.quit()中打印出来,听起来很相似,但它们之间有很大的区别,您需要根据自己的用例/要求来使用它们。你会发现一个详细的讨论,你的程序成功地跨越了一个新的ChromeDriver进程和ChromeBrowser实例,在你的finally{}块中,你只需要调用driver.quit(),如下所示:最后,{ driver.quit();}
发布于 2018-04-26 09:15:37
使用Chrome66和chromedriver 2.38,我们在Windows机器上遇到了类似的问题。在测试套件之后,chromedriver将正常关闭(driver.quit),但仍有许多Chrome.exe进程仍在运行。
在我们的例子中,修复方法是删除no-sandbox选项。不推荐使用此选项,而且我们一开始就不应该使用它。这是一个愚蠢的复制/粘贴的web示例。删除该选项后,所有进程都将关闭。
我建议您尝试删除选项列表中的no-sandbox参数。
https://stackoverflow.com/questions/49165005
复制相似问题