1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-09-06

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

# 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触れちゃうのです。

1
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?