让我首先说,我已经尝试了以下链接的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")
更改为实际按钮的选择器。