java Selenium webdriver无法退出chrome驱动程序

yc0p9oo0  于 2023-02-07  发布在  Java
关注(0)|答案(8)|浏览(371)

我正在使用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 chrome 版本:40.0.2214.115 selenium 版本:2.32操作系统:Linux Java版本:1.7.0_71
先谢谢你奈良

zvms9eto

zvms9eto1#

您是否在finally块中执行驱动程序.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();
}
qnzebej0

qnzebej02#

如果我使用,效果很好

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

pkln4tw63#

所以,没有什么工作对我来说。我最终做的是设置一个唯一的ID在我的addArguments启动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}')`)
cs7cruho

cs7cruho4#

我是这样解决的:

import os

os.system('killall chrome')

如果你不使用谷歌浏览器做其他事情,它是有用的。

3npbholx

3npbholx5#

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

结果:你一次只使用一个示例,如果你看到任务管理器,你不会发现chromedriver和chrome进程挂起。

pieyvz9o

pieyvz9o6#

在此场景中,您可以使用Web驱动程序的对象池模式,如下所示:

    • 此类创建WebDriver示例池,如Main.java类中通过最终变量“DRIVER_INSTANCES”定义的那样,并从该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();
        }
        
    }
}
41zrol4v

41zrol4v7#

对我来说,driver.quit()正在工作并杀死所有进程,这没有问题。但是每次我使用driver.close(),进程都会保留。如果我使用它10次,10个进程会留在后台进程中,直到我以编程方式或手动方式杀死它们。另外,driver.close()在运行程序结束时,大多数时候会发出一些警告,比如关闭浏览器后
[警告]:连接Chrome浏览器超时,正在重试...

66bbxpm5

66bbxpm58#

这个问题是与driver.quit()方法只为 chrome 。驱动程序退出工作不正常,它没有杀死所有进程的 chrome (包括子进程)。我做了什么。我改变了 selenium 罐代码,以解决这个问题,我的项目,不幸的是,我不能分享我的代码原因的项目规则,不允许分享任何类型的代码。

相关问题