Selenium webdriver不会退出chrome驱动程序

时间:2015-03-18 13:36:46

标签: java selenium selenium-webdriver selenium-chromedriver

我正在使用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驱动程序版本:2.9.248304   铬版本:40.0.2214.115   硒版:2.32   操作系统:Linux   java.version:1.7.0_71

提前致谢, 奈拉

7 个答案:

答案 0 :(得分:2)

所以,没有什么对我有用。我最终做的是在我的 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 $2}')`)

答案 1 :(得分:1)

你是否在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();
}

答案 2 :(得分:1)

我这样解决了他们:

import os

os.system('killall chrome')

如果您不使用Google Chrome浏览器,这将非常有用。

答案 3 :(得分:0)

问题在于针对Chrome的driver.quit()方法。驱动程序退出没有正常工作它没有杀死所有chrome进程(包括子进程)。我做了什么。我更改了Selenium jar代码以修复我的项目,不幸的是我无法分享我的代码项目规则,不允许共享任何类型的代码。

答案 4 :(得分:0)

1)将驱动程序作为单例

$Title  = $_POST['title'];

2)使用Close并在finally块中退出

@Singleton
class BrowserInstance {

ChromeDriver getDriver(){
    ChromeOptions options = new ChromeOptions()
    options.addArguments("--headless --disable-gpu")
    return new ChromeDriver(options)
   }
}

结果:您一次只能使用一个实例,并且如果看到任务管理器,则不会发现chromedriver和chrome进程挂起。

答案 5 :(得分:0)

如果我使用,对我来说很好

driver.close();
driver.quit();

答案 6 :(得分:0)

您可以在这种情况下为 Web 驱动程序使用对象池模式,如下所示:
* * 该类通过最终变量“DRIVER_INSTANCES”创建在 Main.java 类中定义的 WebDriver 实例池,然后从该 Main 类实例化该池

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();
        }
        
    }
}