如何杀死以前由Web驱动程序打开的浏览器实例(chrome)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何杀死以前由Web驱动程序打开的浏览器实例(chrome)相关的知识,希望对你有一定的参考价值。

我想杀死以前由Web驱动程序打开的浏览器实例(chrome)。我该怎么办?在我下面的代码中,我故意不想包含quit()或close(),因为我想让浏览器保持打开状态。因此,每次执行或运行此程序时,我都想杀死/关闭先前打开的浏览器,然后启动一个新实例并保持打开状态。因此,一次只能打开一个浏览器实例。我正在使用Mac。

public static void main(String[] args){

    String website = "http://www.google.com";
    System.setProperty(".....");
    WebDriver driver = new ChromeDriver();
    driver.get(website);

}

行为atm是每次执行此操作时,chrome实例都会堆积起来。避免这种情况的最佳方法是什么?我不是为了测试目的而这样做的。我这样做是因为我想自动执行任务。谢谢。

答案

你可以尝试这个代码:

public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "D:\Automation\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.google.com/");
        try{
            Runtime.getRuntime().exec("TASKKILL /F /IM chrome.exe");
        }
        catch(IOException io){
            System.out.println(io.getMessage());
        }
    }  

注意:它将终止先前与新打开的实例一起打开的所有chrome实例。

另一答案

如果我理解正确,您正在尝试自动执行部分流程,然后让自动化程序退出,让浏览器保持打开状态,以便手动完成其余步骤。在这种情况下,确保只打开一个这样的窗口的最佳方法是保持自动化脚本空闲,直到完成手动任务。在你的主要功能结束时这样的事情:

try {
    while(true) { 
        Thread.sleep(1000); 
        driver.getCurrentUrl(); 
    } 
} catch(Exception e) {}

只要浏览器窗口打开,就可以确保程序保持活动状态。您可以在浏览器中继续手动处理。完成后,您可以关闭浏览器,这将自动结束此过程。或者在开始新任务之前,使用^ c删除旧任务,然后关闭浏览器。

不保持自动化脚本空闲的第二个选项是查找新创建的浏览器实例的进程ID。您可以将进程ID保存在临时文件夹中的某个文件中。每次脚本启动时,它都会检查文件,从中读取pid,如果进程ID存在,请尝试在生成新的浏览器窗口之前将其终止。

以上是关于如何杀死以前由Web驱动程序打开的浏览器实例(chrome)的主要内容,如果未能解决你的问题,请参考以下文章

在第二页上通过 puppeteer 运行灯塔时浏览器实例被杀死

从命令行中只杀死一个 chrome 实例

AWS 如何从私有子网中的 EC2 实例打开网站

Safari浏览器正在杀死Web

如何在不杀死 VM 的情况下关闭和重新打开 Spring Data Neo4J 上下文

如何在活动的 onSaveInstanceState() 之后杀死所有打开的片段