Друзья возник вопрос. Как средствами selenium можно скачать файл со страницы? Как загрузить понятно, а вот столкунлся со скачиванием и задумался. Заранее спасибо!
Очень просто: кликаешь на ссылку - начинается скачивание (в папку Downloads)
Вот здесь интересная идея описана на эту тему
Собственно, суть в том, как я выше и написал, но с помощью настройки параметров профиля файл скачивается в нужную директорию, без предварительного диалогового окна выбора пути для скачивания.
Приведу тут код из ссылки:
from selenium import webdriver
# To prevent download dialog
profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.folderList', 2) # custom location
profile.set_preference('browser.download.manager.showWhenStarting', False)
profile.set_preference('browser.download.dir', '/tmp')
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv')
browser = webdriver.Firefox(profile)
browser.get("http://www.drugcite.com/?q=ACTIMMUNE")
browser.find_element_by_id('exportpt').click()
browser.find_element_by_id('exporthlgt').click()
Спасибо =) Собственно надо было раньше написать, передо мной стоит задача скачать файли из apache и проверить его целостность, хотябы чтобы он весил больше 1 кб =)
Мне кажется это проще сделать без webdriver. Тем же curl-ом. Ну или если надо в Java, то используя библиотеку для работы с файлами
Я хотел попробовать через BrowserMobProxy узнать нахождение файла на сервере через ответ от сервера, а уже потом проверять его там и если файл удовлетворяет условиям проверки, то подавать его на выкачку. Такое реально сделать? Мне кажется это хороший путь.
Как это?
Рассказ про то как использовать BMP:
Selenium и BrowserMobProxy: вместе веселее!
Примеры кода прилагаются, в том числе и пример загрузки файла
Вот тут небольшой метод (на руби + watir-webdriver) включающий валидирование размера файла: Watir-Webdriver Wait for Download to Complete - Stack Overflow
Спасибо большое с проблемой разобрался! Чтобы я делал без вас =)
В библиотеке Selenide есть для этого специальный метод.
Очень удобно можно скачать файл одной командой:
File downloadedFile = $("#your-link").download();
А нет примеров кода на Python?
Если запускать тесты с помощью TestNg, то способ с заданием настроек параметров профиля работает. Но при запуске тестов с помощью maven сборки - все равно вылезает системное окно, предлагающее открыть или сохранить файл. Как быть в этом случае?
Пока не вижу связи между типами запуска проекта и влиянием на FF профили. Нужно больше информации, куски кода.
Настройки параметров:
public static void init() {
FirefoxProfile profile = new FirefoxProfile();
profile.setAcceptUntrustedCertificates(true);
profile.setAssumeUntrustedCertificateIssuer(true);
profile.setEnableNativeEvents(true);
profile.setPreference("javascript.enabled", true);
profile.setPreference("dom.max_script_run_time", 0);
profile.setPreference("dom.max_chrome_script_run_time", 0);
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.download.dir","c:\\downloads");
profile.setPreference("browser.download.manager.showWhenStarting", false);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk","application/vnd.ms-excel");
driver = new FirefoxDriver(profile);
}
В классе:
@Test
public void checkGenereteKeyByLibrarian() {
init();
WDWrapper.open(siteAddress);
loginByUser(loginLibrarian1, passwordLibrarian1);
WDWrapper.driver.findElement(By.xpath("//form[@id='report_form']/a[@id='token_lnk']")).click();
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
String dayToday = sdf.format(new Date(System.currentTimeMillis()));
File file = new File("C:\\downloads\\report_access_tokens__" + dayToday + ".xls");
// работа с файлом и что то там еще
}
Фокус в том, что при сборке TestNG после клика по элементу начинается загрузка файла, и системное окошко, предлагающее его открыть или сохранить файл, не появляется. А с maven-ом ничего не загружается, а вылезает окошко. Ну и соответственно, файл не найден и так далее.
Подниму тему, чтобы добавить ремарку. В случае, если нужно качать PDF файлы, используя интерфейс для скачивания (типа кнопки “Save As PDF”), то возможно потребуется отключить соответствующий плагин:
profile.set_preference("pdfjs.disabled", True)
Тогда не будет запускаться распознаватель pdf-файлов и сразу начнется закачка. Иначе будет запускаться плагин Adobe Acrobat.
Опять поднимаю тему. Теперь с вопросом.
Можно ли скачать файл, используя Selenium + GhostDriver (PhantomJS) ?
Почитав тут: https://github.com/ariya/phantomjs/issues/10052 окончательно запутался… У кого-нибудь получалось?
лучше написать http хелпер, get-ом получать файл, и проерять наличие каким-то fileutils
Добрый день всем.
Скачиваю файл указанным выше путем настройки профиля Firefox. Все время загружает в одну папку - загрузки по умолчанию. В профиле ФФ указал нужную папку, в Selenium так же прописал:
profile.setPreference(“browser.download.dir”,“c:\downloads”);
Все равно загружает в папку по умолчанию.
Как можно изменить путь сохранения?