【问题标题】:how can i download a PDF from Chrome using Selenium in C#如何在 C# 中使用 Selenium 从 Chrome 下载 PDF
【发布时间】:2021-06-23 05:59:08
【问题描述】:

我已经尝试了所有可能的方法来从 Chrome 下载 PDF 报告,而无需打开新的 PDF 查看器选项卡。我想直接在我的本地驱动器上下载 PDF。我正在使用 Coypu 开发我的自动化框架 我使用的代码如下:

BrowserSession _session;

ChromeOptions options = new ChromeOptions();
String downloadFilepath = @"C:\Users\3682143\Downloads";
Dictionary<String,Object> chromeOptionsMap = new Dictionary<String, Object>();
chromeOptionsMap.Add("plugins.plugins_disabled", new String[] {"Chrome PDF Viewer"});                 
chromeOptionsMap.Add("download.default_directory", downloadFilepath);
chromeOptionsMap.Add("plugins.always_open_pdf_externally", true);
chromeOptionsMap.Add("download.prompt_for_download", false);
chromeOptionsMap.Add("pdfjs.disabled", true);
options. AddUserProfilePreference("prefs", chromeOptionsMap);
DesiredCapabilities desiredCap = DesiredCapabilities.Chrome();
desiredCap.SetCapability(CapabilityType.AcceptSslCertificates, true);
desiredCap.SetCapability(ChromeOptions.Capability, options);
_session = new BrowserSession(sessionConfig, new CustomExplorerProfileSeleniumWebDriver(desiredCap));

【问题讨论】:

  • 尝试使用此处找到的 AutoItX(autoitscript.com/site/autoit/downloads) 基本上,我的建议是尝试并提示浏览器的“保存”窗口(尝试将键发送到浏览器,例如 ctrl+s 或 'something '),在要保存的窗口打开后,使用我上面提到的库来控制窗口。我认为您可以使用 AutoItX 在页面上导航,也许您可​​以下载您的文件。您的解决方案可能与我刚才建议的有点相去甚远,但不妨试试 AutoItX,您的浏览器上还会有一个工具可以帮助您。

标签: c# selenium coypu


【解决方案1】:

您应该能够通过将plugins.always_open_pdf_externally 用户配置文件首选项设置为true 来实现此目的。

public void DownloadPdf()
{
  var options = new ChromeOptions();
  options.AddUserProfilePreference("plugins.always_open_pdf_externally", true);

  var chromeDriver = new ChromeDriver(options);
  var webDriver = new CustomSeleniumWebDriver(chromeDriver, Browser.Chrome);
  var session = new BrowserSession(webDriver);
  session.Visit("https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf");
}

class CustomSeleniumWebDriver : SeleniumWebDriver
{
  private CustomSeleniumWebDriver(Browser browser) : base(browser) { }
  public CustomSeleniumWebDriver(IWebDriver webDriver, Browser browser) : base(webDriver, browser) { }
}

测试:Chrome 79.0.3945.117 & ChromeDriver 79.0.3945.36

【讨论】:

    【解决方案2】:

    以下代码将有助于在 Selenium c# 中将页面另存为 pdf。

    using OpenQA.Selenium;
    using OpenQA.Selenium.Chrome;
    
    protected void PDFconversion(ChromeDriver driver, string root, string rootTemp)
    {
        //Grid.Rows.Add(TxtBxName.Text, TxtBxAddress.Text);
        try
        {
            IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
            Thread.Sleep(500);
            js.ExecuteScript("setTimeout(function() { window.print(); }, 0);");
            Thread.Sleep(500);
            driver.SwitchTo().Window(driver.WindowHandles.Last());
            Thread.Sleep(500);
            string JSPath = "document.querySelector('body>print-preview-app').shadowRoot.querySelector('#sidebar').shadowRoot.querySelector('#destinationSettings').shadowRoot.querySelector('#destinationSelect').shadowRoot.querySelector('print-preview-settings-section:nth-child(9)>div>select>option:nth-child(3)')";
            Thread.Sleep(500);
            IWebElement PrintBtn = (IWebElement)js.ExecuteScript($"return {JSPath}");
            Thread.Sleep(500);
            PrintBtn.Click();
            string JSPath1 = "document.querySelector('body>print-preview-app').shadowRoot.querySelector('#sidebar').shadowRoot.querySelector('print-preview-button-strip').shadowRoot.querySelector('cr-button.action-button')";
            Thread.Sleep(1000);
            IWebElement PrintBtn1 = (IWebElement)js.ExecuteScript($"return {JSPath1}");
            PrintBtn1.Click();
            Thread.Sleep(1000);
            SendKeys.Send("{HOME}");
            SendKeys.Send(rootTemp + "\\" + "result.pdf"); // Path
            SendKeys.Send("{TAB}");
            SendKeys.Send("{TAB}");
            SendKeys.Send("{TAB}");
     
            SendKeys.Send("{ENTER}");
            Thread.Sleep(1000);       
        }
        catch (Exception ex)
        {
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-04-12
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 2022-09-27
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多