Selenium webdriver 不退出 chrome 驱动程序
Selenium webdriver does not quit chrome driver
我正在使用 Selenium webdriver
但它没有正确退出 chrome
和 chrome
驱动程序。一些进程稳定运行。
退出代码 chrome :
driver.quit();
开始代码 chrome :
System.setProperty("webdriver.chrome.driver","/<path to chrome driver>/chromedriver");
ChromeOptions options = new ChromeOptions();
options.setBinary(new File("/<path to chrome >/google-chrome"));
driver = new ChromeDriver(options);
Chrome driver version :2.9.248304
Chromium version :40.0.2214.115
Selenium version :2.32
OS: Linux
java.version: 1.7.0_71
提前致谢,
奈拉
您是否在 finally 块中执行 driver.quit()?
System.setProperty("webdriver.chrome.driver","/<path to chrome driver>/chromedriver");
ChromeOptions options = new ChromeOptions();
options.setBinary(new File("/<path to chrome >/google-chrome"));
driver = new ChromeDriver(options);
try
{
//automated steps
}
finally
{
driver.quit();
}
问题出在 driver.quit() 方法仅用于 Chrome。驱动程序退出没有正常工作,它没有杀死 chrome 的所有进程(包括子进程)。我做了什么。我更改了 Selenium jar 代码来为我的项目修复此问题,不幸的是我无法共享我的代码,因为项目规则不允许共享任何类型的代码。
1) 获取单例驱动
@Singleton
class BrowserInstance {
ChromeDriver getDriver(){
ChromeOptions options = new ChromeOptions()
options.addArguments("--headless --disable-gpu")
return new ChromeDriver(options)
}
}
2) 在 finally 块中使用 Close 和 quit
finally {
chromeDriver.close()
chromeDriver.quit()
}
结果:您一次只能使用一个实例,如果您看到任务管理器,您将找不到 chrome驱动程序和 chrome 进程挂起。
我是这样解决的:
import os
os.system('killall chrome')
如果您不使用 Google Chrome 做其他事情,它很有用。
如果我使用
,它对我来说很好用
driver.close();
driver.quit();
所以,没有什么对我有用。我最后做的是在我的 addArguments 上设置一个唯一的 ID 来启动 chromedriver,然后当我想退出时,我会做这样的事情:
opts.addArguments(...args, 'custom-pid-' + randomId());
然后确保它退出:
await this.driver.close()
await this.driver.quit()
spawn(`kill $(ps aux | grep ${RANDOM_PID_HERE} | grep -v "grep" | awk '{print }')`)
在这种情况下,您可以使用 Web 驱动程序的对象池模式,如下所示:
*
* 这个 class 通过最终变量“DRIVER_INSTANCES”创建了 Main.java class 中定义的 WebDriver 实例池,我们从 Main class 实例化了这个池
public class WebDriverPool {
public static Vector<WebDriver> driverPools = new Vector<WebDriver>();
public static void initializeWebDriverPool() {
for(int i=0; i<Main.DRIVER_INSTANCES; i++) {
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
// Add options to Google Chrome. The window-size is important for responsive sites
ChromeOptions options = new ChromeOptions();
//options.addArguments("headless");
options.addArguments("window-size=1200x600");
WebDriver driver = new ChromeDriver(options);
driverPools.add(driver);
}
System.out.println("Driver pool initialized");
}
public static WebDriver getAndRemove() {
WebDriver driver = driverPools.get(0);
driverPools.remove(0);
return driver;
}
/*
* When our all the task are finished then this method is called from the Main.java class to close the running chrome instances
*/
public static void quitAllDrivers() {
for(WebDriver driver: driverPools) {
driver.quit();
}
}
}
我正在使用 Selenium webdriver
但它没有正确退出 chrome
和 chrome
驱动程序。一些进程稳定运行。
退出代码 chrome :
driver.quit();
开始代码 chrome :
System.setProperty("webdriver.chrome.driver","/<path to chrome driver>/chromedriver");
ChromeOptions options = new ChromeOptions();
options.setBinary(new File("/<path to chrome >/google-chrome"));
driver = new ChromeDriver(options);
Chrome driver version :2.9.248304 Chromium version :40.0.2214.115 Selenium version :2.32 OS: Linux java.version: 1.7.0_71
提前致谢, 奈拉
您是否在 finally 块中执行 driver.quit()?
System.setProperty("webdriver.chrome.driver","/<path to chrome driver>/chromedriver");
ChromeOptions options = new ChromeOptions();
options.setBinary(new File("/<path to chrome >/google-chrome"));
driver = new ChromeDriver(options);
try
{
//automated steps
}
finally
{
driver.quit();
}
问题出在 driver.quit() 方法仅用于 Chrome。驱动程序退出没有正常工作,它没有杀死 chrome 的所有进程(包括子进程)。我做了什么。我更改了 Selenium jar 代码来为我的项目修复此问题,不幸的是我无法共享我的代码,因为项目规则不允许共享任何类型的代码。
1) 获取单例驱动
@Singleton
class BrowserInstance {
ChromeDriver getDriver(){
ChromeOptions options = new ChromeOptions()
options.addArguments("--headless --disable-gpu")
return new ChromeDriver(options)
}
}
2) 在 finally 块中使用 Close 和 quit
finally {
chromeDriver.close()
chromeDriver.quit()
}
结果:您一次只能使用一个实例,如果您看到任务管理器,您将找不到 chrome驱动程序和 chrome 进程挂起。
我是这样解决的:
import os
os.system('killall chrome')
如果您不使用 Google Chrome 做其他事情,它很有用。
如果我使用
,它对我来说很好用driver.close();
driver.quit();
所以,没有什么对我有用。我最后做的是在我的 addArguments 上设置一个唯一的 ID 来启动 chromedriver,然后当我想退出时,我会做这样的事情:
opts.addArguments(...args, 'custom-pid-' + randomId());
然后确保它退出:
await this.driver.close()
await this.driver.quit()
spawn(`kill $(ps aux | grep ${RANDOM_PID_HERE} | grep -v "grep" | awk '{print }')`)
在这种情况下,您可以使用 Web 驱动程序的对象池模式,如下所示:
*
* 这个 class 通过最终变量“DRIVER_INSTANCES”创建了 Main.java class 中定义的 WebDriver 实例池,我们从 Main class 实例化了这个池
public class WebDriverPool {
public static Vector<WebDriver> driverPools = new Vector<WebDriver>();
public static void initializeWebDriverPool() {
for(int i=0; i<Main.DRIVER_INSTANCES; i++) {
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
// Add options to Google Chrome. The window-size is important for responsive sites
ChromeOptions options = new ChromeOptions();
//options.addArguments("headless");
options.addArguments("window-size=1200x600");
WebDriver driver = new ChromeDriver(options);
driverPools.add(driver);
}
System.out.println("Driver pool initialized");
}
public static WebDriver getAndRemove() {
WebDriver driver = driverPools.get(0);
driverPools.remove(0);
return driver;
}
/*
* When our all the task are finished then this method is called from the Main.java class to close the running chrome instances
*/
public static void quitAllDrivers() {
for(WebDriver driver: driverPools) {
driver.quit();
}
}
}