Моя среда:
Firefox version : 78.9.0esr (64 bits)
Web driver : geckodriver-v0.26.0-win64
OS: Windows 10 (64 bits)
Python version: 3.8 (64 bits)
Python Selenium package version : 3.141.0
Мое требование - загрузить файл CSV с веб-страницы через Selenium (код Python), но не открывая диалоговое окно. Я имею в виду, что если вы вручную нажмете кнопку загрузки, произойдет следующее: вы увидите диалоговое окно с запросом имени (если вы хотите изменить имя по умолчанию) и место для сохранения файла. Что я хочу сделать, так это обойти шаг диалогового окна, поэтому, когда Selenium нажимает кнопку, конкретный файл загружается в какой-то каталог по умолчанию, который я указал с его именем по умолчанию. После долгих гуглений (включая темы на stackoverflow.com) я понял, что этого можно добиться следующим образом, создав новый профиль для экземпляра Firefox, который использует Selenium. Итак, вот мой код:
self.profile = webdriver.FirefoxProfile()
self.profile.set_preference("browser.preferences.instantApply", True)
self.profile.set_preference("browser.download.folderList", 2)
self.profile.set_preference("browser.download.dir", os.getcwd())
self.profile.set_preference(
"browser.helperApps.neverAsk.saveToDisk",
"text/csv;charset=ISO-8859-1"
)
self.profile.set_preference(
"browser.helperApps.neverAsk.openFile",
"text/csv;charset=ISO-8859-1"
)
self.profile.set_preference(
"browser.download.manager.showWhenStarting",
False
)
self.profile.set_preference(
"browser.download.manager.showAlertOnComplete",
False
)
self.profile.set_preference("browser.download.panel.shown", False)
self.profile.set_preference(
"browser.download.manager.focusWhenStarting",
False
)
self.profile.set_preference(
"browser.download.manager.useWindow",
False
)
self.profile.set_preference(
"browser.download.manager.closeWhenDone",
False
)
self.web_driver = webdriver.Firefox(firefox_profile=self.profile)
Теперь проблема с вышеупомянутым кодом заключается в том, что он по-прежнему открывает диалоговое окно, и работает только следующая часть:
self.profile.set_preference("browser.download.folderList", 2)
self.profile.set_preference("browser.download.dir", os.getcwd()
Но помимо этого сохраняется основная проблема, то есть каждый раз появляется диалоговое окно. Сейчас я просмотрел множество страниц в Интернете (форумы, учебные пособия и т. д.), и когда я сравниваю их предлагаемые коды, мне кажется, что я действовал таким же образом, и я не вижу, что еще в терминах команды/параметра следует/можно добавить, чтобы предотвратить открытие диалогового окна и вместо этого автоматически загрузить файл CSV. Я был бы признателен, если бы вы любезно прояснили и указали, в чем проблема с моим кодом.