Загрузите 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 ответа:
Эта проблема может быть решена путем добавления следующих атрибутов к элементу загрузки / печати
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();