You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Selenium Grid中正确配置Chrome无头模式及确定配置位置?

解决Selenium Grid中Chrome无头模式配置失效的问题

我之前也碰到过类似的坑,来给你梳理下正确的配置姿势,应该能解决你的问题:

先搞懂核心:配置优先级与命名空间

Selenium 4之后对W3C标准的支持更严格,旧的chromeOptions键已经被废弃,必须用goog:chromeOptions这个命名空间,这大概率是你之前配置无效的关键原因!另外,客户端传递的配置会覆盖Node端的默认配置,所以要明确你是想让所有Node实例默认无头,还是仅在特定会话启用。


方式1:客户端代码中配置(灵活,适合按需启用)

在创建RemoteWebDriver时,直接把无头参数放到goog:chromeOptions里,确保参数是新版的--headless=new(Chrome 112+推荐用这个,旧的--headless是遗留无头模式,兼容性差)。

举两个常用语言的例子:

Java

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless=new");
options.addArguments("--disable-gpu"); // 部分Linux环境需要
options.addArguments("--no-sandbox"); // 容器/非root用户运行必须加

RemoteWebDriver driver = new RemoteWebDriver(new URL("http://你的hub地址:4444/wd/hub"), options);

Python

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")

driver = webdriver.Remote(
    command_executor='http://你的hub地址:4444/wd/hub',
    options=chrome_options
)

方式2:Selenium Node端全局配置(所有Chrome实例默认无头)

如果你想让这个Node上的所有Chrome会话都默认无头,可以通过两种方式配置:

启动Node时用命令行参数指定

java -jar selenium-server-4.x.x.jar node \
  --hub http://你的hub地址:4444 \
  --capabilities '{"browserName": "chrome", "goog:chromeOptions": {"args": ["--headless=new", "--disable-gpu", "--no-sandbox"]}, "maxInstances": 5}'

通过配置文件(toml/json)设置

创建一个node-config.toml文件:

[server]
port = 5555

[node]
hub = "http://你的hub地址:4444"
capabilities = [
  {
    browserName = "chrome",
    "goog:chromeOptions" = {
      args = ["--headless=new", "--disable-gpu", "--no-sandbox"]
    },
    maxInstances = 5
  }
]

然后启动Node:

java -jar selenium-server-4.x.x.jar node --config node-config.toml

必查的坑点

  1. 验证配置是否生效:访问Hub的控制台(http://你的hub地址:4444/ui),查看Node的能力配置,确认goog:chromeOptions里的参数是否正确显示。
  2. 权限问题:如果Node在容器或非root用户下运行,--no-sandbox参数必须加,否则Chrome会直接启动失败。
  3. 版本兼容:确保Selenium Server、ChromeDriver、Chrome三者版本匹配,版本不兼容也会导致无头模式失效。

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

火山引擎 最新活动