RSelenium で webElem$switchToWindow() できない! 時の解決法


表題の通りです。
先に解決策から:

# RSelenium純正のSwitchはwebdrvierAPIの仕様変更で機能しなくなってる。これで対応
sel_window_switch <- function (remDr, windowId) {
  qpath <- sprintf("%s/session/%s/window", remDr$serverURL, 
                   remDr$sessionInfo[["id"]])
  remDr$queryRD(qpath, "POST", qdata = list(handle = windowId))
}

@johndharrison
https://github.com/ropensci/RSelenium/issues/143
さんのコードを引用させて頂きました。感謝感謝。

使い方は見ての通りです。
この関数にremDrとwindowIDを渡すと、ちゃんとWindowを繰り替えてくれますよ!!

ウィンドウハンドラの扱いはこちらを参考にどうぞ:

  # ウィンドウのハンドラ一覧。
  # 殆どの場合クロール実行時は[[1]]:メイン [[2]]:ポップアップになると思います。 
  window_hnd <- remDr$getWindowHandles()

  # ウィンドウ切り替え。[[]] 参照に注意
  sel_window_switch(remDr, window_hnd[[2]])

なんでこうなるの?

webdriver 周辺でw3c準拠にAPI仕様の見直しが進んでまして、
残念ながら我らがRSeleniumがそれに追いつけていないみたいです。

とはいえ自在にスクリプトを送信出来る仕様になってますので、諸々対応していく事は可能なのですね。
偉大な先人たちに感謝しながらWebスクレープがはかどります。

(他の解決策としては古いchromiumを使うなどの手もありますが、あまりオススメしません)

Rで書くの本当にラクだな...
次回はp_load(seleniumpipes)とかやろうと思ってます。
dplyr 構文でselenium触れちゃうのです。