Как обрабатывать всплывающее окно загрузки в Firefox при загрузке Excel с помощью Selenium Webdriver

Я пытаюсь загрузить файл Excel из Firefox и Webdriver, но не могу обработать всплывающее окно загрузки.

При нажатии на кнопку мне нужно, чтобы файл загружался автоматически, без отображения всплывающего окна.

Вот мой код:

FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.setPreference("browser.download.folderList", 2);
firefoxProfile.setPreference("browser.download.manager.showWhenStarting", false);
firefoxProfile.setPreference("browser.download.dir", Constant.Downloaded_Path);
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/csv/xls/xlsx");
firefoxProfile.setPreference("browser.helperApps.neverAsk.openFile",
    "text/csv,application/x-msexcel,application/excel,application/x-excel,application/vnd.ms-excel,image/png,image/jpeg,text/html,text/plain,application/msword,application/xml");
firefoxProfile.setPreference("browser.helperApps.alwaysAsk.force", false);
firefoxProfile.setPreference("browser.download.manager.alertOnEXEOpen", false);
firefoxProfile.setPreference("browser.download.manager.focusWhenStarting", false);
firefoxProfile.setPreference("browser.download.manager.useWindow", false);
firefoxProfile.setPreference("browser.download.manager.showAlertOnComplete", false);
firefoxProfile.setPreference("browser.download.manager.closeWhenDone", false);
return firefoxProfile;

Но приведенный выше код не работает. Кто-нибудь может помочь?


person vsreekanth    schedule 01.04.2016    source источник


Ответы (3)


Для начала вам нужно получить тип mime, соответствующий файлу:

  • Откройте Инструменты разработчика, а затем вкладку Сеть.
  • Вернитесь на страницу и щелкните файл для загрузки
  • Вернитесь в панель сети и выберите первый запрос
  • Скопируйте тип mime справа от Content-Type из заголовка ответа:

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

  • Установите предпочтение "browser.helperApps. NeverAsk.saveToDisk" с вашим типом MIME.
  • Убедитесь, что папка для загрузки "browser.download.dir" существует.

Вот рабочий пример с Firefox:

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.download.dir", "C:\\Windows\\temp");
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/vnd.ms-excel");
profile.setPreference("pdfjs.disabled", true);  // disable the built-in PDF viewer

WebDriver driver = new FirefoxDriver(profile);
driver.get("http://www.exinfm.com/free_spreadsheets.html");
driver.findElement(By.linkText("Capital Budgeting Analysis")).click();
person Florent B.    schedule 01.04.2016
comment
Спасибо, Флоран. Он отлично работает с Excel, но не работает с Pdf. Вы можете мне помочь в этом. Заранее спасибо. - person vsreekanth; 06.04.2016
comment
вы можете добавить несколько типов MIME в browser.helperApps. NeverAsk.saveToDisk. Разделитель - запятая. - person Florent B.; 06.04.2016
comment
Спасибо, у меня все заработало, когда я установил флаг pdfjs.disabled. Это отсутствует во многих других ответах / сообщениях в блогах. - person kamituel; 25.04.2016
comment
Это сработало как шарм. Ключ в том, чтобы получить точный Mime Type, как вы объяснили. - person user890332; 28.02.2018
comment
супер полезный комментарий - person Adrien Forbu; 07.12.2020

            FirefoxProfile profile = new FirefoxProfile();
            // profile.SetPreference("browser.helperApps.neverAsk.saveToDisk", " text/plain, application/octet-stream doc xls pdf txt");
            profile.SetPreference("browser.download.manager.alertOnEXEOpen", false);
            profile.SetPreference("browser.helperApps.neverAsk.saveToDisk", "application/csv, text/csv, text/plain,application/octet-stream doc xls pdf txt");
            profile.SetPreference("browser.download.manager.focusWhenStarting", false);
            profile.SetPreference("browser.download.useDownloadDir", true);
            profile.SetPreference("browser.helperApps.alwaysAsk.force", false);
            profile.SetPreference("browser.download.manager.closeWhenDone", true);
            profile.SetPreference("browser.download.manager.showAlertOnComplete", false);
            profile.SetPreference("browser.download.manager.useWindow", false);
            profile.SetPreference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", false);
            profile.SetPreference("pdfjs.disabled", true);
            _driverInstance = new FirefoxDriver(profile); 

Эти настройки у меня сработали. Надеюсь, это поможет тебе.

person Sudeepthi    schedule 01.04.2016

вам необходимо предоставить mimetypes для приложения, которое вы хотите загрузить. Для python, если вы хотите включить его для всех приложений, используйте следующий код

import mimetypes
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", ','.join(list(it for it in mimetypes.types_map.values())))
person Shoaib Mansoor    schedule 11.12.2020