通常のChromeの場合、動画やPDFなどダウンロードできますが、SeleniumのChromeヘッドレスにするとダウンロードできません。それは通常時の設定とSelenium時の設定が別だからです。

そのため、ダウンロード時の追加設定が必要になります。


まずは普通に、Chromeのオプションを設定します。

  opt = Selenium::WebDriver::Chrome::Options.new
  opt.add_argument('--headless')  # ヘッドレス
  ...
  ...
  ...


次にダウンロードのための設定(プレファレンス)をします。

  dl_dir = "#{ENV['USERPROFILE']}\\Downloads"
  dl_dir.gsub!("/","\\")
  
  dl_pref = {
    'prompt_for_download'=> false,
    'default_directory'=>   dl_dir,  # バックスラッシュで絶対Path
    'directory_upgrade'=>   true
  }
  opt.add_preference(:download, dl_pref)

dl_dir は、ダウンロードファイルを格納するフォルダーで、相対パスではなく絶対パスで指定します。

しかもURL区切り文字はバックスラッシュです。 ENV['USERPROFILE'] のURL区切り文字は / のため gsub で置き換え処理をしています。


最後に、SeleniumのWebDriverにオプションを指定します。

  wd = Selenium::WebDriver.for :chrome, options: opt
2021/12/09