Как загрузить файл с помощью удаленного веб-драйвера Firefox?

Я пытался адаптировать несколько существующих решений (1, 2) на удаленный веб-драйвер Firefox, работающий в контейнер Selenium/standalone-firefox Docker:

options = Options()
options.set_preference('browser.download.dir', '/src/app/output')
options.set_preference('browser.download.folderList', 2)
options.set_preference('browser.download.manager.showWhenStarting', False)
options.set_preference('browser.helperApps.alwaysAsk.force', False)
options.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/pdf')
options.set_preference('pdfjs.disabled', True)
options.set_preference('pdfjs.enabledCache.state', False)
options.set_preference('plugin.disable_full_page_plugin_for_types', False)

cls.driver = webdriver.Remote(
    command_executor='http://selenium:4444/wd/hub',
    desired_capabilities={'browserName': 'firefox', 'acceptInsecureCerts': True},
    options=options
)

Навигация и нажатие соответствующей кнопки загрузки работает нормально, но файл никогда не появляется в каталоге загрузки. Я проверил все, что мог придумать:

  • Пользователь в контейнере Selenium может создавать файлы в /src/app/output, и эти файлы видны в основной ОС.
  • Я могу успешно загрузить файл с помощью моего настольного браузера.
  • Тип содержимого ответа — application/pdf.

Что мне не хватает?


person l0b0    schedule 23.10.2018    source источник
comment
Вам не хватает того, что файл загружается на удаленную машину или в контейнер, где работает браузер.   -  person Sers    schedule 24.10.2018
comment
избавьте себя от массы головной боли и используйте HTTP-клиент для загрузки файлов   -  person Corey Goldberg    schedule 24.10.2018
comment
@CoreyGoldberg Суть в том, чтобы протестировать интерфейс, так что это не вариант.   -  person l0b0    schedule 24.10.2018
comment
Насколько я помню, мне пришлось добавить опцию 'pdfjs.enabledCache.state', false, чтобы иметь возможность загружать pdf в firefox, вы можете сделать снимок экрана после загрузки, чтобы убедиться, что firefox не открывает pdf вместо загрузки. Также вы ждете загрузки файла, возможно, браузер закрылся до загрузки файла.   -  person Sers    schedule 24.10.2018


Ответы (1)


Выяснилось, что другие изменения, внесенные во время исследования, привели к тому, что сервер возвращал текстовый/обычный документ, а не файл PDF. Для справки, это самый простой набор опций, с которыми я мог работать:

options.set_preference('browser.download.dir', DOWNLOAD_DIRECTORY)
options.set_preference('browser.download.folderList', 2)
options.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/pdf')
options.set_preference('pdfjs.disabled', True)
person l0b0    schedule 31.10.2018