无头模式下运行自动化脚本能否添加Chrome扩展?报错咨询
问题描述
尝试在Selenium自动化脚本中通过ModHeaderExtension扩展添加请求头,但在无头(headless)模式下运行时出现报错,无法启动会话。请问能否在无头模式下正常运行该自动化脚本?
代码示例
ChromeOptions配置代码
private static ChromeOptions getChromeOptions() { final ChromeOptions options = new ChromeOptions(); final DesiredCapabilities cap = new DesiredCapabilities(); cap.setCapability(ChromeOptions.CAPABILITY, options); options.addExtensions(new File("./src/main/java/com/extenstions/ModHeaderExtension.crx")); options.addArguments("--remote-allow-origins=*"); options.addArguments("--headless"); options.addArguments("--window-size=1920,1080"); options.addArguments("--start-maximized"); return options; }
浏览器初始化代码
public static WebDriver startBrowserInitialization() { WebDriverManager.chromedriver().setup(); if ("Y".equalsIgnoreCase(environment.checkHeadless())){ driver.set(new ChromeDriver(getChromeOptions()))}
报错信息
org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Response code 500. Message: unknown error: failed to wait for extension background page to load: chrome-extension://idgpnmonknjnojddfkpgkljpfnnfcklj/_generated_background_page.html from unknown error: page could not be found: chrome-extension://idgpnmonknjnojddfkpgkljpfnnfcklj/_generated_background_page.html Host info: host: 'PC-INDU', ip: '192.16.20.133' Build info: version: '4.8.3', revision: 'e5e76298c3' System info: os.name: 'Windows 11', os.arch: 'amd64', os.version: '10.0', java.version: '17.0.5' Driver info: org.openqa.selenium.chrome.ChromeDriver Command: [null, newSession {capabilities=[Capabilities {browserName: chrome, goog:chromeOptions: {args: [--remote-allow-origins=*, --headless, --window-size=1920,1080, --start-maximized], extensions: [Q3IyNAMAAAAYBAAAEqwECqYCMII...]}}], desiredCapabilities=Capabilities {browserName: chrome, goog:chromeOptions: {args: [--remote-allow-origins=*, --headless, --window-size=1920,1080, --start-maximized], extensions: [Q3IyNAMAAAAYBAAAEqwECqYCMII...]}}}]
解决方案
可以在无头模式下正常运行,但需要调整配置或更换请求头的设置方式,具体方法如下:
1. 使用新版无头模式参数
Chrome 112及以上版本支持--headless=new参数,该模式更接近正常Chrome浏览器的行为,对扩展兼容性更好。替换原有代码中的--headless:
options.addArguments("--headless=new");
2. 直接通过Chrome参数或DevTools设置请求头(推荐)
无需依赖ModHeader扩展,避免扩展加载问题:
- 方式一:通过Chrome启动参数添加
options.addArguments("--header=X-Custom-Header:YourValue"); // 多个请求头可添加多个--header参数 options.addArguments("--header=Another-Header:AnotherValue");
- 方式二:通过Chrome DevTools协议设置
浏览器初始化完成后,执行CDP命令添加请求头:
ChromeDriver driver = new ChromeDriver(getChromeOptions()); // 设置请求头 Map<String, Object> headers = new HashMap<>(); headers.put("X-Custom-Header", "YourValue"); driver.executeCdpCommand("Network.setExtraHTTPHeaders", Collections.singletonMap("headers", headers));
3. 调整扩展加载方式(若必须使用ModHeader)
- 尝试加载已解压的扩展文件夹而非crx文件,避免签名或压缩问题:
options.addExtensions(new File("./src/main/java/com/extenstions/ModHeaderUnpacked"));
- 确认ModHeader扩展版本与当前Chrome浏览器版本兼容,更新扩展至最新版。
内容的提问来源于stack exchange,提问作者Indu Devendran
相关产品推荐
相关产品推荐

