Загрузите PDF-файл напрямую с помощью chromedriver


Я пытаюсь автоматизировать функцию загрузки файлов с помощью Selenium WebDriver. Я использую Google Chrome, и тип файла для загрузки имеет формат 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, включая это , но ни одно из этих решений не работает для меня.

Я использую - v54 в Гугл Хром.0.2840.99, Chromedriver v2 для.25 и Селена В3.0.1

HTML ссылки загрузки / печати показан ниже

Введите описание изображения здесь

2 2

2 ответа:

Эта проблема может быть решена путем добавления следующих атрибутов к элементу загрузки / печати

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");

Можно задать атрибут download элемента a, а затем щелкнуть по элементу. Смотрите код ниже:

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();