代码之家  ›  专栏  ›  技术社区  ›  map7

Chrome无头下载pdf使用水豚和硒

  •  3
  • map7  · 技术社区  · 7 年前

    我已经设置了我的无头chrome与以下和这对所有的测试不下载文件的作品。

    download_path="#{Rails.root}/tmp/downloads"
    
    Capybara.register_driver(:headless_chrome) do |app|
      caps = Selenium::WebDriver::Remote::Capabilities.chrome(
        chromeOptions: {
          prefs: {
            'download.default_directory' => download_path,
            "download.extensions_to_open" => "applications/pdf",
            'download.directory_upgrade' => true,
            'download.prompt_for_download' => false,
            'plugins.plugins_disabled' => ["Chrome PDF Viewer"]
          },
          binary: "/opt/google/chrome/google-chrome",
          args: %w[headless disable-gpu window-size=1920,1080]
        }
      )
      Capybara::Selenium::Driver.new(
        app,
        browser: :chrome,
        desired_capabilities: caps
      )
    end
    

    我已经读到,我应该发送一个命令到硒铬驱动程序,允许下载,但我不知道如何与我的设置。这就是我想做的,但我的设置(不是从我的代码库);

    @driver = Selenium::WebDriver.for :chrome, options: options
    
    bridge = @driver.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_path
                     })
    

    如何在设置中访问selenium网桥以便发送此http调用?

    1 回复  |  直到 7 年前
        1
  •  9
  •   Thomas Walpole    7 年前

    您不需要再手动发送它,因为它已添加到selenium中 Selenium::WebDriver::Chrome::Server#download_path= . 您可以通过 Capybara::Selenium::Driver

    ...
    Capybara::Selenium::Driver.new(
      app,
      browser: :chrome,
      desired_capabilities: caps
    ).tap { |d| d.browser.download_path = <your download path> }