Как автоматически загружать файлы из всплывающего диалогового окна с помощью selenium-python
Я пытаюсь автоматически загружать файлы из всплывающего диалогового окна, используя selenium-python.
Всплывающие окна firefox выглядят так:
![enter image description here]()
Я хочу симулировать нажатие "ОК"
Я нашел этот ответ. Как захватить всплывающее окно в Selenium 2 python, который отправил меня в документы https://selenium-python.readthedocs.org/en/latest/navigating.html?highlight=popup#popup-dialogs
Я пробовал это
alert = driver.switch_to_alert()
#alert.send_keys(Keys.RETURN) #No alert is present
и это
alert = driver.switch_to_alert()
alert.accept() #no alert is present
Если я запустил pprint.pprint(driver.window_handles)
он печатает только один GUID - показывая, что присутствует только одно окно.
Поэтому, если не присутствует предупреждение, и есть только одно окно - как загрузить эти файлы?
Ответы
Ответ 1
В Python, но это будет работать и в Java, потому что настройки Firefox - это JavaScript:
profile.set_preference("browser.download.panel.shown", False)
profile.set_preference("browser.helperApps.neverAsk.openFile","text/csv,application/vnd.ms-excel")
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/csv,application/vnd.ms-excel")
profile.set_preference("browser.download.folderList", 2);
profile.set_preference("browser.download.dir", "c:\\firefox_downloads\\")
browser = webdriver.WebDriver(firefox_profile=profile)
это работает для файлов CSV, измените его для любого типа загружаемого файла.
Ответ 2
Основываясь на ответе Амей 1) и, конечно, блоге Yi Zeng (в рубине), цитируя саму Selenium, он не взаимодействует с такими диалогами на системном уровне, как это, а также с документацией, здесь представлен питон фрагмент для решения проблемы
from selenium import webdriver
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
profile = FirefoxProfile()
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", 'application/pdf')
driver = webdriver.Firefox(firefox_profile=profile)
driver.get(target_url)
#specific to target_url
driver.find_element_by_css_selector('a[title="Click to Download"]').click()
Ответ 3
У вас есть два варианта:
1) Создайте собственный профиль firefox с настройками, где предварительно определено местоположение загрузки, и Firefox не запрашивает подтверждение для загрузки.
Просто googled и нашел блог, в котором объясняется, как это сделать
2) Используйте sikuli, чтобы автоматизировать клики по диалоговому окну загрузки.
Blog объяснение - как использовать Sikuli
P.S. - Не читайте блоги, но я уверен, что они дадут вам подсказку.
Ответ 4
Благодаря моему использованию и тестированию в моем тесте автоматизации Selenium UI настройка профиля Firefox стала более стабильной, чем класс роботов. Например. Отключите отображение диалогового окна "Загрузка/сохранение" на странице без системы.
FirefoxProfile prof = new FirefoxProfile();
ffprofile.setPreference("browser.download.panel.shown", false);
ffprofile.setPreference("browser.helperApps.neverAsk.saveToDisk","application/zip");
//ffprofile.setPreference("browser.download.folderList", 1); // Default to /home/user/Downloads in Linux.
ffprofile.setPreference("browser.download.folderList", 2);
ffprofile.setPreference("browser.download.dir", "/tmp");
Ответ 5
FirefoxProfile fxProfile = new FirefoxProfile();
fxProfile.SetPreference("browser.download.panel.shown", false);
fxProfile.SetPreference("browser.helperApps.neverAsk.openFile", "text/csv,application/vnd.ms-excel");
fxProfile.SetPreference("browser.helperApps.neverAsk.saveToDisk", "text/csv,application/vnd.ms-excel");
fxProfile.SetPreference("browser.download.folderList", 2);
fxProfile.SetPreference("browser.download.dir", "c:\\mydownloads");
IwebDriver driver = new FirefoxDriver(fxProfile);
Ответ 6
Большинство браузеров (в моем случае Firefox) по умолчанию выбирают кнопку OK. Так что мне удалось решить эту проблему с помощью следующего кода. Это в основном нажимает ввод для вас, и файл загружается.
Robot robot = new Robot();
// A short pause, just to be sure that OK is selected
Thread.sleep(3000);
robot.keyPress(KeyEvent.VK_ENTER);
Ответ 7
открытый класс DemoFileDownload {
FirefoxProfile prof = new FirefoxProfile(); prof.setpreference("browser.helperApps.neverAsk.SaveToDisk", "mimetype_of_file"); prof.setpreference( "browser.download.folderlist", int_value); prof.setpreference("browser.download.dir," folder_path ");//если вышеуказанное значение int_value равно 2//int_value может иметь следующие значения://1 - папка загрузок //0 - рабочий стол //2 - пользовательская папка } получить MIME-тип с сайта ниже: www.sitepoint.com/mimetypes-complete-list/
для браузера chrome используйте chromeoptions вместо firefoxprofile
Ответ 8
Следующая информация работала для меня, надеюсь, это поможет вам.
Ссылка: http://www.softwaretestingstudio.com/download-file-selenium-webdriver-firefox/