用C#中的Selenium ChromeDriver点击下载PDF不起作用



让我首先说,我已经尝试了以下链接的Stack Overflow文章中的建议,但没有成功:

  • 这个问题与我的问题最相似,没有答案使用Selenium Java下载PDF在Chrome 中不起作用

  • 使用Selenium WebDriver 在自定义路径下载文件

  • 如何在selenium中禁用chrome pdf查看器,当任何pdf出现时,它应该在默认下载中自动下载

  • 如何使用selenium网络驱动程序下载chrome中的pdf文件

  • 禁用chromedriver 中的PDF查看器插件

以下是我的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);
}

你会注意到("禁用弹出窗口阻止",true(位被注释掉了,这是因为我没有看到这个:

已禁用PDF查看器

返回到所需下载的PDF。

像上面所有链接的帖子一样,我需要在点击链接时下载PDF,而不是在新窗口中打开它。由于Selenium对PDF的限制,我无法成功点击";打开";按钮。Visual Studio引发以下异常:

无SuchElementException

正如评论中所要求的,以下是尝试与禁用的PDF查看器交互的代码:

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

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

如果它是相关的,我试图下载的PDF是Salesforce Lightning PDF

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

这里的问题与单击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下载到我想要的目录中。

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

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

相关内容

  • 没有找到相关文章

最新更新