Загрузите файл по пути при запуске безголового режима в Chrome

Использую следующие версии:

  • Рубин 2.4.1
  • хромированная отвертка 2.33
  • селен-webdriver 3.7.0
  • вода 6.7.3
  • объект-страница 2.2.2
  • Браузер Chrome 62.0.32

Файл env.rb содержит путь к каталогу загрузки. При запуске теста НЕ в режиме без заголовка файл загружается отлично, но когда я запускаю его без заголовка, ничего не происходит, и файл не загружается. Я использовал chromderiver 2.27 и Chrome Browser 58. *, и он работал в обоих режимах, кто-нибудь знает, как я могу это преодолеть?


person theRubyGuy    schedule 29.11.2017    source источник


Ответы (2)


Вот что я нашел, и это определенно сработало!

в файле env.rb, когда я настраиваю параметры для безголового режима, я определил его как таковой:

options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--headless') 
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--disable-popup-blocking')
options.add_argument('--window-size=1366,768')
options.add_preference(:download, directory_upgrade: true,
                                prompt_for_download: false,
                                default_directory: DOWNLOAD_DIR)

options.add_preference(:browser, set_download_behavior: { behavior: 'allow' })

$browser = Selenium::WebDriver.for :chrome, options: options

bridge = $browser.send(:bridge)
path = '/session/:session_id/chromium/send_command'
path[':session_id'] = bridge.session_id
bridge.http.call(:post, path, cmd: 'Page.setDownloadBehavior',
                            params: {
                              behavior: 'allow',
                              downloadPath: DOWNLOAD_DIR
                            })

Спасибо за комментарий 89 на странице ошибок Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=696481.

person theRubyGuy    schedule 05.12.2017
comment
Быстрый вопрос: на какой системе у вас это работало? (У меня это работает на Mac, но пока не в Ubuntu.) - person Nathan Appere; 06.04.2018
comment
Что ты конкретно имеешь ввиду ? Версии указаны выше в вопросе :) - person theRubyGuy; 06.04.2018
comment
В вопросе не указана ОС, поэтому мне просто любопытно узнать, удалось ли вам заставить это решение работать в Linux. (В потоке хрома люди действительно плохо справляются с указанием, какую ОС они используют, и получают разное поведение в разных системах). - person Nathan Appere; 06.04.2018
comment
О да, у меня есть ОС, которую я использую - Centos 7. - person theRubyGuy; 06.04.2018
comment
Спасибо за точность! - person Nathan Appere; 06.04.2018
comment
Это действительно так. - person theRubyGuy; 22.07.2018
comment
ваше решение, браузер создан из селена, а не из watir, если он из watir, он должен быть таким, верно ?: driver = Selenium::WebDriver.for :chrome browser = Watir::Browser.new driver - person Jais Anasrulloh Ja'fari; 23.07.2018
comment
В моей текущей среде работает Watir с конфигурациями, которые вы только что упомянули, и конфигурациями, которые я использовал в этом потоке. - person theRubyGuy; 23.07.2018
comment
@ JaisAnasrullohJa'fari Watir::Browser.new $browser получишь ли ты ватир-браузер. Спасибо за обрезанный @theRubyGuy - person EightyEight; 12.10.2018

На данный момент это не поддерживается. Безголовый был реализован без какого-либо кода хрома, который обрабатывает предпочтения. https://bugs.chromium.org/p/chromium/issues/detail?id=775911

person titusfortner    schedule 30.11.2017
comment
Понятно. Есть ли обходной путь? Если нет, то какие последние версии следует использовать для загрузки? Спасибо - person theRubyGuy; 30.11.2017
comment
Это не версия, это безголовый. Если вы используете его без Headless, он будет работать. Если вам нужен безголовый, используйте безголовый драгоценный камень с xvfb. - person titusfortner; 30.11.2017
comment
Я использую xvfb, но он все равно не загружается при работе без головы. - person theRubyGuy; 01.12.2017
comment
Какие возможности вы отправляете? - person titusfortner; 01.12.2017
comment
На данный момент меня нет, только options.add_argument ('- headless'). Чтобы вы посоветовали? - person theRubyGuy; 01.12.2017
comment
Либо используйте гем без головы с xvfb, либо передайте команду без головы, но не то и другое вместе - person titusfortner; 01.12.2017
comment
Я попытался удалить xvfb и сохранить аргумент, но это не решило его. что бы вы настроили для условия if ENV ['HEADLESS'], если я действительно хочу использовать xvfb, как делал раньше? На данный момент он настроен так: require 'headless' headless = Headless.new headless.start at_exit do headless.destroy end - person theRubyGuy; 02.12.2017