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

如何使用Selenium WebDriver Java在无头Chrome中启用通知权限

Chrome传统无头模式(headless参数)的运行逻辑和普通模式不同,不支持加载通过setExperimentalOption配置的prefs内容设置项,你配置的通知权限规则属于这类,所以无头模式下配置会失效。

解决方案

方案1:使用新版无头模式(推荐,Chrome 112及以上版本支持)

新版无头模式的功能和普通Chrome完全对齐,完美支持prefs配置,仅需替换无头模式启动参数即可,修改后代码如下:

if (browserName.equalsIgnoreCase("chrome_headless")) { 
    System.setProperty("webdriver.chrome.driver", "lib/chromedriver.exe");
    Map<String, Object> prefs = new HashMap<String, Object>();
    // 1代表允许通知,2代表阻止,0为默认
    prefs.put("profile.default_content_setting_values.notifications", 1);

    ChromeOptions options = new ChromeOptions();
    // 替换原来的headless参数为新版无头
    options.addArguments("headless=new");
    options.addArguments("window-size=1366,768");
    options.setExperimentalOption("prefs", prefs);

    driver = new ChromeDriver(options);
    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(15,TimeUnit.SECONDS);
}

方案2:低版本Chrome兼容方案

如果你的Chrome版本低于112,无法使用新版无头模式,可以通过Chrome DevTools协议主动为站点授予通知权限,代码示例如下:

// 初始化driver后执行
ChromeDriver chromeDriver = (ChromeDriver) driver;
// 给目标站点授予通知权限,替换成你测试的站点域名
Map<String, Object> permission = new HashMap<>();
permission.put("name", "notifications");
permission.put("origin", "https://你的测试站点域名.com");
permission.put("permission", "granted");
chromeDriver.executeCdpCommand("Browser.setPermission", permission);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:48:04