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

如何通过Java代码启动停止Selenium Grid的Hub并注册Node节点

完全可以通过Java代码实现Selenium Hub、Node的启停及自动注册,无需手动执行命令,以下是两种常用实现方案:

方案1:调用Selenium Grid内置API启动(推荐,生命周期可控)

Selenium Server本身就是Java开发的组件,你可以直接在项目中引入selenium-server-standalone依赖后,调用内置启动类直接启动,不需要调用外部进程。
示例代码如下:

启动Hub代码

import org.openqa.grid.selenium.GridLauncherV3;

public class HubManager {
    public static void startHub(int port) {
        String[] hubParams = {
            "-role", "hub",
            "-port", String.valueOf(port)
        };
        // 直接调用Grid官方启动入口
        GridLauncherV3.main(hubParams);
    }
}

启动Node并自动注册代码

public class NodeManager {
    public static void startChromeNode(String hubHost, int hubPort, int nodePort, String chromeDriverPath) {
        // 配置ChromeDriver路径,对应原命令的-D参数
        System.setProperty("webdriver.chrome.driver", chromeDriverPath);
        String[] nodeParams = {
            "-role", "node",
            "-hub", String.format("http://%s:%d/grid/register", hubHost, hubPort),
            "-port", String.valueOf(nodePort),
            "-browser", "browserName=chrome,maxInstances=5"
        };
        GridLauncherV3.main(nodeParams);
    }
}

如果Hub和Node部署在不同的远程机器上,你可以将上述代码分别打包为独立Jar包,通过Java SSH工具(如JSch)远程调用对应机器执行启动代码即可。

方案2:通过ProcessBuilder执行外部命令(无需引入Selenium依赖)

如果不想在项目中引入Selenium服务端依赖,也可以通过Java的进程管理工具直接执行你原来的手动命令:

启动Hub代码

import java.io.File;
import java.lang.Process;
import java.lang.ProcessBuilder;

public class CmdHubManager {
    public static Process startHub(String seleniumJarPath) throws Exception {
        ProcessBuilder processBuilder = new ProcessBuilder(
            "java", "-jar", seleniumJarPath,
            "-role", "hub"
        );
        // 配置日志输出路径,方便排查问题
        processBuilder.redirectOutput(new File("hub_run.log"));
        processBuilder.redirectError(new File("hub_error.log"));
        return processBuilder.start();
    }
}

启动Node代码

public class CmdNodeManager {
    public static Process startChromeNode(String seleniumJarPath, String chromeDriverPath, String hubAddress) throws Exception {
        ProcessBuilder processBuilder = new ProcessBuilder(
            "java", "-Dwebdriver.chrome.driver=" + chromeDriverPath,
            "-jar", seleniumJarPath,
            "-role", "node",
            "-hub", hubAddress
        );
        processBuilder.redirectOutput(new File("node_run.log"));
        processBuilder.redirectError(new File("node_error.log"));
        return processBuilder.start();
    }
}
启停控制说明

不管使用哪种方案,启动后你都可以持有返回的进程对象,需要停止服务时直接调用process.destroy()方法即可关闭对应Hub/Node进程,无需手动杀进程。

注意事项
  • 所有涉及到的文件路径(selenium jar包、chromedriver)都建议写绝对路径,避免相对路径找不到文件的问题
  • 启动Hub后建议等待3-5秒再启动Node,避免Hub未完成初始化导致Node注册失败
  • 跨机器部署时需要确认Hub所在机器的对应端口(默认4444)对Node机器开放,无防火墙拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:24:02