使用chromedriver直接下载PDF文件

时间:2016-11-23 05:00:58

标签: java pdf selenium-webdriver selenium-chromedriver

我正在尝试使用Selenium WebDriver自动执行文件下载功能。我使用的是谷歌浏览器,下载的文件类型为PDF格式。当WebDriver单击下载(或打印)链接时,浏览器会显示pdf文件的预览,而不是直接下载。如何让chrome驱动程序直接下载pdf文件? 我尝试了以下代码,但没有运气

ChromeOptions options = new ChromeOptions();
Map<String,Object> preferences = new HashMap<>();
preferences.put("pdfjs.disabled", true);
options.setExperimentalOption("prefs", preferences);
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
WebDriver driver=new ChromeDriver(options);

我知道这个问题已经在StackOverflow上提出过,包括this,但这些解决方案都不适用于我。

我正在使用 - Google Chrome v54.0.2840.99,Chromedriver v2.25和Selenium v​​3.0.1

下载/打印链接的HTML如下所示

enter image description here

2 个答案:

答案 0 :(得分:3)

通过将以下属性添加到download / print元素

可以解决此问题
download=""
target="_blank"

这可以使用javascript完成,如下所示

WebElement printLink=driver.findElements(By.linkText("Print")).get(0);
JavascriptExecutor js= (JavascriptExecutor) driver;
js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])",printLink,"download","");
js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])",printLink,"target","_blank");

答案 1 :(得分:2)

您可以设置a元素的属性download,然后单击该元素。请参阅以下代码:

String script = "document.querySelector('td a[href*=\"/print/\"]').setAttribute('download','name-of-the-download-file-recommend-guid-or-timestamp.pdf');";
((JavascriptExecutor)driver).executeScript(script);
driver.findElement(By.cssSelector("td a[href*='/print/']")).click();