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

如何在Playwright Java中禁用Chrome新标签页PDF查看器

解决Playwright Chromium禁用内置PDF查看器的问题

问题分析

你给Chromium调用setFirefoxUserPrefs()方法是无效的——这个方法仅针对Firefox浏览器生效。Chromium需要通过启动参数或浏览器上下文偏好设置来配置PDF查看器行为。

有效解决方案

方案1:通过启动参数+上下文偏好配置(推荐)

直接在Chromium启动时添加禁用PDF查看器的参数,同时配合上下文偏好设置实现「始终外部打开PDF」:

private void PlaywrightSmokeTestConfigureInit(String browserType) {
    playwright = Playwright.create();
    ArrayList<String> arguments = new ArrayList<>();
    arguments.add("--start-fullscreen");
    // 添加禁用Chrome PDF查看器的启动参数
    arguments.add("--disable-pdf-extension");
    arguments.add("--pdfjs-disable");

    boolean headless = false;

    switch (browserType) {
        case "chromium":
            // 创建浏览器上下文时设置Chromium偏好
            BrowserContext context = playwright.chromium()
                    .launch(new BrowserType.LaunchOptions()
                            .setChannel(browserType)
                            .setHeadless(headless)
                            .setArgs(arguments))
                    .newContext(new Browser.NewContextOptions()
                            .setPreferences(Map.of(
                                    "plugins.always_open_pdf_externally", true,
                                    "pdfjs.disabled", true,
                                    "plugins.plugins_disabled", new String[]{"Chrome PDF Viewer"}
                            )));
            browser = context.browser();
            break;
        case "firefox":
            Map<String, Object> firefoxPrefs = new HashMap<>();
            firefoxPrefs.put("pdfjs.disabled", true);
            firefoxPrefs.put("plugins.always_open_pdf_externally", true);
            browser = playwright.firefox().launch(new BrowserType.LaunchOptions()
                    .setChannel(browserType)
                    .setHeadless(headless)
                    .setArgs(arguments)
                    .setFirefoxUserPrefs(firefoxPrefs));
            break;
        // 其他浏览器分支...
    }
}

方案2:自动化修改Chrome设置页面(备选)

如果需要通过chrome://settings/content/pdfDocuments页面配置,可以自动化操作该页面:

// 在浏览器上下文创建后,打开设置页面并修改
Page settingsPage = context.newPage();
settingsPage.navigate("chrome://settings/content/pdfDocuments");
// 等待设置项加载(不同Chrome版本可能选择器不同,需自行调整)
settingsPage.waitForSelector("settings-toggle#alwaysOpenPdfExternally");
// 点击切换为「始终用外部应用打开PDF」
settingsPage.click("settings-toggle#alwaysOpenPdfExternally");

关键注意点

  • 禁止给Chromium使用setFirefoxUserPrefs(),该方法仅对Firefox生效
  • Chromium的偏好设置需在Browser.NewContextOptions()中通过setPreferences()传递
  • 启动参数--disable-pdf-extension和--pdfjs-disable可直接禁用内置PDF查看器扩展

内容的提问来源于stack exchange,提问作者Angel Dayredzhiev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:57:38