【问题标题】:How to download a pdf file in chrome using selenium webdriver如何使用 selenium webdriver 在 chrome 中下载 pdf 文件
【发布时间】:2015-07-28 09:53:16
【问题描述】:

我想使用 selenium 在 chrome 中下载 pdf。

System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir")  
               + System.getProperty("file.separator")
               + "BrowserDrivers"
               + System.getProperty("file.separator")
               + "chromedriver.exe");

String downloadFilepath = "C:\\Users\\Vinod\\Downloads";

HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);

//Save Chrome Opions
ChromeOptions options = new ChromeOptions();
HashMap<String, Object> chromeOptionsMap = new HashMap<String, Object>();
options.setExperimentalOption("prefs", chromePrefs);
options.addArguments("--test-type");


DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(ChromeOptions.CAPABILITY, chromeOptionsMap);
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(ChromeOptions.CAPABILITY, options);


driver = new ChromeDriver(cap);
driver.get(url);

我尝试了上面的代码,但它不起作用

【问题讨论】:

  • 为什么不工作?哪里有问题?也许一些调试器使用?或者某些函数调用的错误状态?您尝试过什么来解决问题?
  • 实际上当我点击一个按钮时,pdf应该会自动下载,在以前的浏览器版本中它可以正常工作。我的浏览器已更新,pdf 正在打开而不是下载

标签: java selenium selenium-webdriver


【解决方案1】:

由于 chrome 57 自动 pdf 预览不再作为插件工作,现在您可以更改一个设置以使其工作。您实际上可以通过检查 chrome 自己的首选项对话框来检查首选项的名称,在“内容设置”下显示“在默认 PDF 查看器应用程序中打开 PDF 文件”的标志。

您可以将其设置为 false 以避免自动 pdf 预览,如下所示(ruby 示例):

caps = Selenium::WebDriver::Remote::Capabilities.chrome(
        "chromeOptions" => {           
            'args' => ['disable-gpu', "--window-size=1920,1080"],
            prefs: {
                "download.prompt_for_download": false,
                "download.directory_upgrade": true,
                "plugins.always_open_pdf_externally": true,
                "download.default_directory": DownloadHelpers::PATH.to_s
            }
        }
    )
Capybara::Selenium::Driver.new(
        app,
        browser: :chrome,
        desired_capabilities: caps
    )

【讨论】:

    【解决方案2】:

    您可以加载此页面并使用 selenium 导航更改设置:

    chrome://settings/content/pdfDocuments
    

    【讨论】:

      【解决方案3】:

      这里是任何使用 .NET 的人的 C# 选项

      var tsTimeout = new TimeSpan(0, 5, 0);
      
      ChromeOptions chromeOptions = new ChromeOptions(); 
      chromeOptions.AddUserProfilePreference("download.default_directory", _downloadFolder); 
      chromeOptions.AddUserProfilePreference("download.prompt_for_download", false); 
      chromeOptions.AddUserProfilePreference("download.directory_upgrade", true); 
      chromeOptions.AddUserProfilePreference("plugins.plugins_disabled", "Chrome PDF Viewer"); 
      chromeOptions.AddUserProfilePreference("plugins.always_open_pdf_externally", true);
      
      _driver = new ChromeDriver(CWebCrawler.WebCrawlerRootFolder, chromeOptions, tsTimeout);
      

      【讨论】:

        【解决方案4】:

        您需要将以下语句添加到您的 chrome 配置文件中:

        chromePrefs.put("pdfjs.disabled", true);
        

        似乎较新版本的浏览器具有在浏览器中显示 PDF 文件的内置功能。更多信息请参考this,虽然它适用于 Firefox 配置文件,但仍然值得阅读。

        希望能解决您的问题,否则您可能需要降级您的 chrome 才能使其正常工作。如果您有任何疑问,请告诉我。

        【讨论】:

        • 对于 Firefox,我使用相同的代码,即 ff 配置文件。我也尝试了该命令,但没有用
        【解决方案5】:

        您是否使用 Adob​​e Acrobat/Adobe Reader 来显示 PDF?如果是这样,那可能是您需要修改 Abode 的行为。

        以下是我必须采取的步骤:

        1. 打开 Adob​​e Reader
        2. 编辑菜单,首选项
        3. 从类别列表中选择 Internet
        4. 取消选中在浏览器中显示 PDF
        5. 按确定

        您还可以在 Chrome 中禁用 Adob​​e 插件,这将强制 Chrome 下载 PDF。

        它在 chrome://plugins 下。

        但正如您所说,它最新的 chrome 浏览器然后检查插件中是否可见 chrome PDF 视图,如果是,也禁用它。

        • 禁用“Chrome PDF 查看器”或取消标记始终允许运行复选框尝试两者

        【讨论】:

        • 以前我只是通过禁用 pdf 查看器来做到这一点,但在更新浏览器后,即使插件处于禁用模式,我也会遇到问题。第二件事是,如果我喜欢在 adobe 中取消选中 pdf 浏览器,我可能会在 IE 中遇到问题
        • 那么你可以在 selenium 脚本运行时执行此操作,它应该禁用所有扩展,只需通过你的 selenium 代码尝试链接stackoverflow.com/questions/14049151/…
        • 您可以尝试使用 ROBOT 类并按 ctrl+S 保存 pdf,然后从将 pdf 保存在硬盘中的机器人按 Enter 键?试试这个
        • Fahad 我引用了那个链接,我认为它是用于扩展而不是插件的,即使我尝试过但没有用。
        • 对于 FF IE,我使用的是 sikuli 和 ff 配置文件。所以需要改这么多地方的代码才能使用机器人类
        猜你喜欢
        • 2017-08-26
        • 1970-01-01
        • 2018-04-06
        • 1970-01-01
        • 1970-01-01
        • 2021-03-21
        • 2012-06-03
        • 1970-01-01
        相关资源
        最近更新 更多