【问题标题】:Downloading PDF on click with Selenium ChromeDriver in C# not working在 C# 中使用 Selenium ChromeDriver 单击下载 PDF 不起作用
【发布时间】:2020-12-23 01:14:06
【问题描述】:

首先让我说我尝试了以下链接的 Stack Overflow 文章中的建议,但无济于事:

这是我的 ChromeOptions:

            {
                ChromeOptions chromeOptions = new ChromeOptions();
                chromeOptions.AddUserProfilePreference("download.prompt_for_download", false);
                chromeOptions.AddUserProfilePreference("download.directory_upgrade", true);
                chromeOptions.AddUserProfilePreference("download.default_directory", DOWNLOAD_DIR);
                //chromeOptions.AddUserProfilePreference("disable-popup-blocking", true);
                chromeOptions.AddUserProfilePreference("plugins.plugins_disabled", "Chrome PDF Viewer");
                chromeOptions.AddUserProfilePreference("plugins.always_open_pdf_externally", true); 
                chromeOptions.AddArgument("--no-sandbox");
                _driver = new ChromeDriver(chromeOptions);
            }

你会注意到 ("disable-popup-blocking", true) 位被注释掉了,这是因为我没有看到这个:

disabled PDF viewer

返回到出现的下载所需的 PDF。

像上面所有链接的帖子一样,我需要在单击链接时下载 PDF 而不是在新窗口中打开它,并且由于 Selenium 对 PDF 的限制,我无法成功单击禁用查看器上的“打开”按钮。 Visual Studio 抛出以下异常:

NoSuchElementException

根据 cmets 的要求,以下是尝试与禁用的 PDF 查看器交互的代码:

_driver.SwitchTo().Window(_driver.WindowHandles[1]);
_driver.FindElement(By.LinkText("Open")).Click();

是否有人对这里发生的事情有任何可能的解决方案或见解?我对编程还是比较陌生,如果有任何建议,我将不胜感激。

如果它完全相关,我尝试下载的 PDF 是 Salesforce Lightning PDF

【问题讨论】:

  • 请在您的问题中包含代码。
  • @derloopkat 我用专门尝试与禁用的 PDF 查看器交互的代码更新了问题。

标签: c# selenium pdf selenium-webdriver selenium-chromedriver


【解决方案1】:

更新:我终于找到了解决方案,所以我发帖以防其他人遇到这个问题。

这里的问题与单击 iFrame 内的 PDF 的按钮有关(请参阅上面链接的“禁用的 PDF 查看器”图像)。上述所有 ChromeOptions 都是正确,试图与禁用的 PDF 查看器交互的代码也是如此。缺少的是这一行:

_driver.SwitchTo().Frame("pdfFrame");

这将位于上面列出的两行之间,导致 3 行代码如下所示:

 _driver.SwitchTo().Window(_driver.WindowHandles[1]);
 _driver.SwitchTo().Frame("pdfFrame");
 _driver.FindElement(By.LinkText("Open")).Click();

添加后,我可以与“打开”按钮进行交互,并将我的 PDF 下载到我想要的目录中。

【讨论】:

    【解决方案2】:

    NoSuchElementException 表示您的元素不在 DOM 上。

    您必须将By.LinkText("Open") 更改为实际按钮的选择器。

    【讨论】:

    • 我也尝试过By.Id("open-button"),但没有运气。我的感觉是这个问题与 PDF 查看器和 Selenium 的兼容性有关,但显然我不确定。
    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 2015-08-07
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 2018-11-25
    • 1970-01-01
    相关资源
    最近更新 更多