gpt4 book ai didi

java - Selenium 启动的 ChromeDriver 一直在后台运行

转载 作者:行者123 更新时间:2023-11-29 06:52:28 50 4
gpt4 key购买 nike

我无法完全删除一个项目,因为 chromedriver 实例在后台运行,即使没有代码正在执行。请看下图。 Task Manager Process View

删除项目时出现的错误是:Eclipse error while project deletion

以下面的代码为例:

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Test {

public static void main(String[] args) throws Exception {

String url = "https://www.google.com";
System.setProperty("webdriver.chrome.driver", "src/driver/chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get(url);
System.out.println(driver.getTitle());

}
}

尝试运行这段代码,假设运行 5 次,将有 5 个后台运行实例。尝试重新启动 Eclipse,但没有成功。

我知道这是因为我没有写这行:

driver.close();

但通常情况下,当主线程终止时,所有支持运行的实例都应该随之终止。

这是一个已知问题,还是我编写的脚本有误。

提前致谢。

最佳答案

您需要处理以下几件事:

  1. 尝试运行这段代码,假设运行 5 次,将有 5 个后台运行实例:这是因为每次您都打开了一个您从未发布过的新驱动程序实例。

  2. 尝试重新启动 Eclipse,但没有成功:值得一提的是,Eclipse 是一个 IDE(集成开发环境),可以帮助我们通过编程语言构建编程步骤。因此,我们通过 Eclipse 为 Selenium 编写程序/步骤来打开/关闭浏览器 session 并退出驱动程序 session 。但是 Eclipse 无法控制 Selenium 在打开/关闭浏览器 session 和退出驱动程序 session 方面的执行。因此,重新启动 Eclipse 不会有任何影响。

  3. driver.close():此命令只会帮助您关闭当前驱动程序拥有焦点的浏览器 session /窗口。

  4. 当主线程终止时,所有支持运行的实例都应该随之终止:你是对的。每次打开所有浏览器 session 的是 WebDriver 实例(即驱动程序 - 根据您的代码)。因此,当您的程序结束时,您应该始终调用 driver.quit(),它会关闭所有浏览器窗口、退出驱动程序并安全地结束 session 。


但是,在任何时候你都可以强行杀死所有 WebDriver 变体的实例,例如 , , 通过具体方法如下:

  • Java 解决方案(Windows):

    import java.io.IOException;

    public class Kill_ChromeDriver_GeckoDriver_IEDriverserver
    {
    public static void main(String[] args) throws Exception
    {
    Runtime.getRuntime().exec("taskkill /F /IM geckodriver.exe /T");
    Runtime.getRuntime().exec("taskkill /F /IM chromedriver.exe /T");
    Runtime.getRuntime().exec("taskkill /F /IM IEDriverServer.exe /T");
    }
    }
  • Python 解决方案(Windows):

    import os
    os.system("taskkill /f /im geckodriver.exe /T")
    os.system("taskkill /f /im chromedriver.exe /T")
    os.system("taskkill /f /im IEDriverServer.exe /T")
  • Python 解决方案(跨平台):

    import os
    import psutil

    PROCNAME = "geckodriver" # or chromedriver or IEDriverServer
    for proc in psutil.process_iter():
    # check whether the process name matches
    if proc.name() == PROCNAME:
    proc.kill()

关于java - Selenium 启动的 ChromeDriver 一直在后台运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43445545/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com