You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac环境下Selenium执行START命令不存在错误的解决咨询

问题:Mac系统下Selenium执行时无法关闭Chrome实例并报错"Cannot run program 'START'"

我在Mac系统上用Eclipse运行Selenium WebDriver做自动化任务,需求是每次执行代码时先关掉之前打开的Chrome实例,再启动新的,保证同一时间只有一个Chrome实例运行。这段代码在Windows上没问题,但到Mac上就报错:

Cannot run program "START": error=2, No such file or directory

我的代码如下:

public class Demo { 
    public static void main(String[] args){ 
        System.setProperty("webdriver.chrome.driver", "/Users/Downloads/chromedriver/chromedriver"); 
        WebDriver driver = new ChromeDriver(); 
        driver.get("https://www.google.com/"); 
        try{ 
            Runtime.getRuntime().exec("START taskkill /F /IM chrome.exe"); 
            System.exit(0); 
        } catch(IOException io){ 
            System.out.println(io.getMessage()); 
        } 
    } 
}

我试过用sudo open Eclipse.app/以管理员权限启动Eclipse,但还是报同样的错。请问在Mac/Unix环境下该怎么解决,或者要修改哪些代码?


解决方法

这问题很典型——你代码里用的START taskkill /F /IM chrome.exe是Windows专属的命令,Mac属于Unix-like系统,用的是完全不同的进程管理工具,自然找不到START和taskkill这些命令,所以才会报错。下面给你几个针对性的解决方案:

1. 替换Mac专属的进程终止命令

把Windows的taskkill换成Mac上的pkill或者killall命令,这两个是Unix系统终止进程的标准工具:

  • pkill chrome:终止所有名为chrome的进程
  • killall Chrome:注意Mac上Chrome的进程名首字母是大写的C,这个命令也能清除所有Chrome相关进程

你只需要把代码里的Runtime.getRuntime().exec("START taskkill /F /IM chrome.exe");替换成下面二选一即可:

方案A:使用pkill

Runtime.getRuntime().exec("pkill chrome");

方案B:使用killall

Runtime.getRuntime().exec("killall Chrome");

2. 更优雅的跨平台关闭方式(强烈推荐)

其实完全不用调用系统命令来杀进程,Selenium本身就提供了专门的关闭方法,既跨平台又安全:

  • driver.quit():关闭所有关联的浏览器窗口,彻底销毁WebDriver实例,释放所有资源(比close()更彻底)
  • driver.close():仅关闭当前焦点所在的浏览器窗口,若只有一个窗口则效果类似,但quit()更适合收尾

修改后的代码可以改成这样,不管在Windows还是Mac上都能正常运行:

public class Demo { 
    public static void main(String[] args){ 
        System.setProperty("webdriver.chrome.driver", "/Users/Downloads/chromedriver/chromedriver"); 
        WebDriver driver = new ChromeDriver(); 
        try {
            driver.get("https://www.google.com/");
            // 这里添加你的自动化任务代码
        } finally {
            // 不管任务成功失败,都确保关闭浏览器并释放资源
            driver.quit();
            System.exit(0);
        }
    } 
}

3. 实现"启动前关闭残留Chrome实例"的需求

如果你的场景是之前的代码执行异常导致Chrome进程残留,需要在启动新实例前先清理,那可以在初始化WebDriver之前先执行杀进程命令,比如:

public class Demo { 
    public static void main(String[] args){ 
        // 先清理残留的Chrome进程
        try {
            Runtime.getRuntime().exec("pkill chrome");
            // 给进程2秒时间完成关闭
            Thread.sleep(2000);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }

        // 再启动新的Chrome实例
        System.setProperty("webdriver.chrome.driver", "/Users/Downloads/chromedriver/chromedriver"); 
        WebDriver driver = new ChromeDriver(); 
        try {
            driver.get("https://www.google.com/");
            // 你的自动化任务逻辑
        } finally {
            driver.quit();
        }
    } 
}

额外注意事项

  • 用pkill或killall时,如果你自己正在使用Chrome浏览器,这些命令会直接关闭你正在用的窗口,执行代码前记得关闭个人使用的Chrome
  • 如果你用的是Selenium 4.x及以上版本,其实可以不用手动设置webdriver.chrome.driver系统属性,Selenium会自动匹配ChromeDriver,能省掉不少路径配置的麻烦

内容的提问来源于stack exchange,提问作者jumbo_siopao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:42:31