10

R からリモートで Web フォームに入力したことのある人はいますか?

スコアを使用して、R でアーチェリーの統計を行いたいと思います。http://www.archersmate.co.uk/の分類とハンディキャップを提供する非常に便利な Web ページがあります。これは当然、統計シートに含めたいと思います。

このフォームにリモートで入力して、結果を R に返すことは可能ですか?

そうしないと、すべてのハンディキャップ テーブルを取得して、自分でデータベースに貼り付けなければなりません。

更新: フォームの送信ボタンが JavaScript で記述されているという事実に問題を絞り込みました。

4

4 に答える 4

9

このRSeleniumパッケージを使用して、Web フォームに入力して送信し、結果を取得できます。

RSeleniumを利用する次のコードは、入力例 (男性、18 歳未満、ロングボウ、ブリストル V、500) のデータをダウンロードします。

library(RSelenium)

# Start Selenium Server --------------------------------------------------------

checkForServer()
startServer()
remDrv <- remoteDriver()
remDrv$open()


# Simulate browser session and fill out form -----------------------------------

remDrv$navigate('http://www.archersmate.co.uk/')
remDrv$findElement(using = "xpath", "//input[@value = 'Male']")$clickElement()
Sys.sleep(2) 
remDrv$findElement(using = "xpath", "//select[@id = 'drpAge']/option[@value = 'Under 18']")$clickElement()
remDrv$findElement(using = "xpath", "//input[@value ='Longbow']")$clickElement() 
remDrv$findElement(using = "xpath", "//select[@id = 'rnd']/option[@value = 'Bristol V']")$clickElement()
remDrv$findElement(using = "xpath", "//input[@id ='scr']")$sendKeysToElement(list('5', '0', '0'))
remDrv$findElement(using = "xpath", "//input[@id = 'cmdCalc']")$clickElement()

# Retrieve and download results injecting javascript ---------------------------

Sys.sleep(2)
clsf <- remDrv$executeScript(script = 'return $("#txtClass").val();', args = list())[[1]]
hndcp <- remDrv$executeScript(script = 'return $("#txtHandicap").val();', args = list())[[1]]

remDrv$quit()
remDrv$closeServer()

のデフォルトのブラウザRSeleniumは Firefox です。ただし、RSeleniumを使用したヘッドレス ブラウジングもサポートしていますPhantomJS。レバレッジPhanomJSするには、

  • PhantomJSをダウンロードして、ユーザー パスに配置します。
  • 次に説明するように、最初と最後にあるコード スニペットを置き換えます

デフォルトのブラウジング (上記のように):

checkForServer()
startServer()
remDrv <- remoteDriver()

...

remDrv$quit()
remDrv$closeServer()

ヘッドレス ブラウジング:

pJS <- phantom()
remDrv <- remoteDriver(browserName = 'phantomjs')

...

remDrv$close()
pJS$stop()
于 2014-12-24T00:41:01.820 に答える
0

postForm ここでRcurlを見てみたいと思うかもしれませんし、ここにも素晴らしいチュートリアルがあります

于 2013-01-13T18:00:24.157 に答える
0

フォームが ajax イベントをトリガーするため、これは RCurl では実行できません。そのため、postForm 関数では十分ではありません。

于 2014-02-25T13:25:16.173 に答える
0

同様の問題に対する回答を探しているので、これは役に立たないかもしれませんが、スクレイピングしたい URL を見ると、入力するフォームは実際には HTML フォームであり、次の方法で説明を取得できます。

url <- "http://www.archersmate.co.uk/"
forms <- getHTMLFormDescription(url)

omegahat.org のパッケージ「RHTMLForms」も参照してください。

于 2013-04-30T17:10:31.250 に答える