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

Chromium 129+版本Selenium Java中ModHeader扩展自动启用问题求助

解决Chromium 129+中Selenium加载ModHeader扩展自动禁用的问题

问题背景

在Chromium 128.0.6576.0版本中,通过Selenium Java加载ModHeader的crx扩展并配置HTTP头可正常工作,但升级至129.0.6631.0及后续版本后,扩展会被自动禁用,必须手动进入「管理扩展」页面启用,阻塞了测试流程。

解决方案

方案1:使用ModHeader官方WebDriver集成(推荐)

Chromium 129+对扩展权限管控更严格,直接加载crx易被自动禁用。改用官方提供的无扩展或专用扩展方案,稳定性更高:

方式A:通过CDP直接设置HTTP头(无需扩展)

完全绕过ModHeader扩展,利用Chrome DevTools Protocol直接配置请求头,代码示例:

// 初始化ChromeDriver后,直接通过CDP设置HTTP头
ChromeDriver driver = new ChromeDriver(options);

// 构造需要设置的HTTP头
Map<String, Object> customHeaders = new HashMap<>();
if (featureValue != null && !featureValue.trim().isEmpty()) {
    customHeaders.put("x-feature", featureValue);
}
if (cellValue != null && !cellValue.trim().isEmpty()) {
    customHeaders.put("x-cell-selector", cellValue);
}

// 执行CDP命令设置额外HTTP头
driver.executeCdpCommand("Network.setExtraHTTPHeaders", Map.of("headers", customHeaders));

此方式无需依赖任何扩展,彻底避免扩展被禁用的问题。

方式B:使用官方WebDriver专用扩展

替换原有crx文件,使用ModHeader官方维护的自动化适配版扩展,加载方式改为指定扩展路径(而非crx):

// 移除原addExtensions逻辑,改用load-extension参数
// 替换为你本地的ModHeader WebDriver扩展路径
options.addArguments("--load-extension=/path/to/modheader-webdriver-extension");

该扩展针对自动化场景做了权限适配,不会被Chromium自动禁用。

方案2:自动启用被禁用的ModHeader扩展(备用)

若必须使用现有crx文件,可通过Selenium自动操作扩展管理页面启用:

// 初始化driver后,获取ModHeader扩展ID
List<ChromeExtension> extensions = driver.getExtensions();
String modHeaderId = null;
for (ChromeExtension ext : extensions) {
    if ("ModHeader - Modify HTTP headers".equals(ext.getName())) {
        modHeaderId = ext.getId();
        break;
    }
}

// 打开扩展管理页面
driver.get("chrome://extensions/");

// 启用开发者模式(部分Chromium版本需要)
WebElement devModeToggle = new WebDriverWait(driver, Duration.ofSeconds(10))
        .until(ExpectedConditions.elementToBeClickable(By.id("devMode")));
devModeToggle.click();

// 定位并点击ModHeader的启用开关
WebElement extToggle = new WebDriverWait(driver, Duration.ofSeconds(10))
        .until(ExpectedConditions.elementToBeClickable(
                By.cssSelector(String.format("extensions-item[id='%s'] #toggle", modHeaderId))
        ));
extToggle.click();

// 继续执行原配置流程
if((featureValue != null && !featureValue.trim().isEmpty()) && (cellValue !=null && !cellValue.trim().isEmpty())){
    driver.get(String.format("https://webdriver.modheader.com/add?x-feature=%s&x-service-type=custom&x-cell-selector=%s", featureValue, cellValue));
} else if (featureValue != null && !featureValue.trim().isEmpty()) {
    driver.get(String.format("https://webdriver.modheader.com/add?x-feature=%s&x-service-type=custom", featureValue));
} else if (cellValue !=null && !cellValue.trim().isEmpty()) {
    driver.get(String.format("https://webdriver.modheader.com/add?x-cell-selector=%s", cellValue));
}
new WebDriverWait(driver, Duration.ofSeconds(500)).until(ExpectedConditions.titleIs("Done"));

注意:chrome://extensions/的DOM结构可能随Chromium版本变化,需根据实际页面调整元素选择器;headless模式下访问该页面可能需要额外参数支持。

额外注意事项

  • 确保Chromedriver版本与Chromium版本完全匹配(WebDriverManager可自动处理,建议验证)
  • 使用最新版本的ModHeader扩展文件,适配Chromium 129+的权限规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:54:52