★データ解析備忘録★

ゆる〜い技術メモ

RSeleniumでChromeからファイルをダウンロードするディレクトリを指定する方法

結論

RSeleniumはだいたいわかってるから読むのが面倒くさい人へ。サーバー起動時にextraCapabilitiesオプションでダウンロードディレクトリの情報をChromeオプションとしてlist形式で渡してやれば設定できます。

# Chromeオプションを追加
eCaps <- list(
  chromeOptions = 
    list(prefs = list(
      "profile.default_content_settings.popups" = 0L,
      "download.prompt_for_download" = FALSE,
      "download.default_directory" = "/path/to/download_directory"
    )
    )
)

# リモートサーバーへ接続
rD <- rsDriver(extraCapabilities = eCaps)

解説

Seleniumは、ブラウザをプログラムから自動操作するためのドライバーです。{RSelenium}パッケージは、それをRから操作するためのパッケージです。このパッケージはSelenium Serverを起動してブラウザを操作するのですが、そのための rsDriver() 関数のヘルプを見ると以下のような引数の解説があります。

f:id:songcunyouzai:20170729130353p:plain

これの ... が重要で、ここはRSeleniumで作られるremoteDriverクラスを作成するときのオプションを指定するところです。

https://cran.r-project.org/web/packages/RSelenium/vignettes/RSelenium-saucelabs.htmlにあるように、 remoteDriver() でクラスを作るとオプション(というかクラスの中身)一覧が見られます。

library(RSelenium)
remdr <- remoteDriver()
remdr
#> $remoteServerAddr
#> [1] "localhost"
#> 
#> $port
#> [1] 4444
#> 
#> $browserName
#> [1] "firefox"
#> 
#> $version
#> [1] ""
#> 
#> $platform
#> [1] "ANY"
#> 
#> $javascript
#> [1] TRUE
#> 
#> $nativeEvents
#> [1] TRUE
#> 
#> $extraCapabilities
#> list()

ここで出てくる最後の extraCapabilities には、list形式で様々なブラウザに対するオプションを書くことができます。Chromeを使う場合、オプションの指定には 以下が参考になります。残念ながらRでの例はありませんが、、、 sites.google.com

そんな感じで、 extraCapabilities にリストを渡してそれをサーバー起動時に rsDriver() のオプションとして指定してやれば、{RSelenium} で Chromeを操るときのダウンロードディレクトリを自分で変えることができます。

# Chromeオプションを追加
eCaps <- list(
  chromeOptions = 
    list(prefs = list(
      "profile.default_content_settings.popups" = 0L,
      "download.prompt_for_download" = FALSE,
      "download.default_directory" = "/path/to/download_directory"
    )
    )
)

# リモートサーバーへ接続
rD <- rsDriver(extraCapabilities = eCaps)