Linux系统下Chrome新无头模式(--headless=new)中window-size参数失效问题
解决Chrome新无头模式(--headless=new)自定义分辨率不生效问题
Chrome 112+引入的新无头模式(--headless=new)与旧无头模式的参数逻辑存在差异,直接设置window-size参数经常会被默认的虚拟显示配置覆盖,导致截图始终是800x600的低分辨率。以下是经过验证的解决方法:
方法一:参数组合强制生效
新无头模式下,需要同时指定三个参数才能确保自定义分辨率生效:
--headless=new:启用新无头模式--window-size=1600,1200:设置目标窗口分辨率--force-device-scale-factor=1:禁用自动缩放,避免系统默认尺寸覆盖自定义设置
代码示例(以Selenium为例)
Python
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument("--headless=new") options.add_argument("--window-size=1600,1200") options.add_argument("--force-device-scale-factor=1") driver = webdriver.Chrome(options=options) # 后续截图或操作逻辑 driver.save_screenshot("test.png") driver.quit()
Java
import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; ChromeOptions options = new ChromeOptions(); options.addArguments("--headless=new"); options.addArguments("--window-size=1600,1200"); options.addArguments("--force-device-scale-factor=1"); ChromeDriver driver = new ChromeDriver(options); // 截图操作 driver.getScreenshotAs(OutputType.FILE); driver.quit();
方法二:CDP命令直接设置设备度量
如果参数组合仍然不生效,可以利用Chrome DevTools Protocol(CDP)直接强制设置窗口和截图的分辨率,这种方式优先级更高,不会被其他参数干扰。
Python示例
driver.execute_cdp_cmd("Emulation.setDeviceMetricsOverride", { "width": 1600, "height": 1200, "deviceScaleFactor": 1, "mobile": False, "screenOrientation": { "type": "portraitPrimary", "angle": 0 } })
注意事项
- 避免同时使用
--start-maximized或--kiosk等会强制改变窗口大小的参数,这些参数会覆盖window-size的设置 - 确保Chrome版本在112及以上,新无头模式才会生效
- 部分Linux环境下可能需要禁用Ozone平台特性,可额外添加
--disable-features=UseOzonePlatform参数尝试
内容的提问来源于stack exchange,提问作者Monita Shinkar
相关产品推荐
相关产品推荐

