Selenium webdriver 不退出 chrome 驱动程序

Selenium webdriver does not quit chrome driver

我正在使用 Selenium webdriver 但它没有正确退出 chromechrome 驱动程序。一些进程稳定运行。

退出代码 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();
        }
        
    }
}