我正在尝试使用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 v3.0.1
下载/打印链接的HTML如下所示
答案 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();