Chrome безголовый скачать pdf - PullRequest
       79

Chrome безголовый скачать pdf

0 голосов
/ 17 апреля 2020

У меня есть скрипт, который загружает PDF с сайта, который постоянно обновляется каждый месяц, и я хочу автоматизировать это. Это работает, но я не могу заставить его работать без головы, и я думаю, что это потому, что он не обрабатывает загрузки правильно. Кажется, он запускает chrome в автономном режиме, и мои навигационные команды работают, но при загрузке ничего не происходит.

#!/usr/bin/env ruby
#
require 'capybara'
require 'rb-inotify'
require 'webdrivers/chromedriver'

def initialise
  Capybara.register_driver :chrome do |app|
    Capybara::Selenium::Driver.new(app, :browser => :chrome, options: chrome_options)
  end
  @session = Capybara::Session.new(:chrome)
end

# Settings and profile for the Chrome Browser
# NOTE: still cannot get headless working
def chrome_options
  opts = Selenium::WebDriver::Chrome::Options.new
  opts.add_argument('--headless') unless ENV['UI']
  opts.add_argument('--no-sandbox')
  opts.add_argument('--disable-gpu')
  opts.add_argument('--disable-dev-shm-usage')
  opts.add_argument('--window-size=1920,1080')

  opts.add_preference(:download,
                      directory_upgrade: true,
                      prompt_for_download: false,
                      default_directory: "~/Downloads")

  opts.add_preference(:plugins,
                      plugins_disabled: ["Chrome PDF Viewer"])

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

Обновление Я использую Chrome версия 81.0.4044.113-1

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

В разных версиях Chrome и selenium-webdriver настройки, необходимые для работы загрузок, изменились / выросли. Похоже, вам не хватает одного из них.

opts.add_preference('download.default_directory', '~/Downloads')

Еще одна вещь, которую вы также можете сделать, в зависимости от версии, это

def initialise
  Capybara.register_driver :chrome do |app|
    Capybara::Selenium::Driver.new(app, :browser => :chrome, options: chrome_options).tap do |driver|
      driver.browser.download_path = '~/Downloads'
  end
  @session = Capybara::Session.new(:chrome)
end
0 голосов
/ 19 апреля 2020

Я добавил несколько конфигураций в ваш код, возможно, он будет работать:

#!/usr/bin/env ruby
#
require 'capybara'
require 'rb-inotify'
require 'webdrivers/chromedriver'

def initialise
  Capybara.register_driver :chrome do |app|
    Capybara::Selenium::Driver.new(app, :browser => :chrome, options: chrome_options)
  end
  @session = Capybara::Session.new(:chrome)
end

# Settings and profile for the Chrome Browser
# NOTE: still cannot get headless working
def chrome_options
  download_directory = "~/Downloads"
  opts = Selenium::WebDriver::Chrome::Options.new
  opts.add_argument('--headless') unless ENV['UI']
  opts.add_argument('--no-sandbox')
  opts.add_argument('--disable-gpu')
  opts.add_argument('--disable-dev-shm-usage')
  opts.add_argument('--window-size=1920,1080')

  opts.add_preference(:download,
                      directory_upgrade: true,
                      prompt_for_download: false,
                      default_directory: download_directory)
  opts.add_preference(:browser, set_download_behavior: { behavior: 'allow' })

  driver = Capybara::Selenium::Driver.new(app, browser: :chrome,
                                          options: options)
  bridge = driver.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_directory
                   })
  driver
  opts.add_preference(:plugins,
                     always_open_pdf_externally: true)

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