2013-01-09 8 views
8
erhalten

Hat jemand jemals ein Web-Formular aus der Ferne von R ausgefüllt?Wie Sie ein Online-Formular ausfüllen und Ergebnisse in R

Ich würde gerne einige Bogenschießen Statistiken in R mit meinen Ergebnissen tun. Es gibt eine sehr praktische Webseite, die Ihnen die Klassifizierung und die Handicaps http://www.archersmate.co.uk/ gibt, die ich natürlich in mein Statistikblatt aufnehmen möchte.

Ist es möglich, dieses Formular aus der Ferne zu füllen und die Ergebnisse zurück zu R ???

Sonst müsste ich alle Handicap-Tabellen bekommen und sie selbst in eine Datenbank stecken.

UPDATE: Wir haben das Problem auf die Tatsache eingegrenzt, dass der Formular-Senden-Button in Javascript geschrieben ist.

+3

http://stackoverflow.com/search?q=[r]+webscrapping –

+0

@ AriB.Friedman das ist wirklich nicht genug .. :) diese Frage beinhaltet Verständnis der [hcalc.js] (http: // www .archersmate.co.uk/scripts/ajax_hcalc.js) Javascript, das durch die Funktionen 'ajaxCalc()' und 'ajaxiCalc()' analysiert, um die 'url' Zeichenkette zu erstellen, die im Aufruf'/functions/iclass.php' verwendet wird. Ich sehe kein Beispiel für all das mit R auf S.O. –

+0

@AnthonyDamico Ich vermutete, dass es nicht sein würde. Aber es gibt ihr einen Ausgangspunkt und ein Vokabular und damit eine Hoffnung, ihre Frage zu verengen.Sie haben edel und geschickt viel Arbeit gemacht, um die Frage einzuschränken, also könnten Sie vielleicht die Frage bearbeiten, um zielgerichteter zu sein? –

Antwort

0

Sie vielleicht einen Blick auf Rcurl des postFormhere und Theres auch ein nettes Tutorial here

+0

Ich glaube nicht, dass RCurl es lösen kann, da es kein herkömmliches HTML-Formular ist. –

0

dies nicht dir helfen könnten nehmen wollen, wie ich auf ein ähnliches Problem eine Antwort bin auf der Suche, aber Blick auf die URL Sie möchten, dass die Formulare kratzen, sind actuall HTML-Formulare ausfüllen, und Sie können die Beschreibung von erhalten:

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

betrachten Sie auch das Paket „RHTMLForms“ auf omegahat.org

0

Dies kann in RCurl nicht ausgeführt werden, da das Formular ein Ajax-Ereignis auslöst, sodass die Funktion postForm nicht ausreicht.

9

Sie können das RSelenium-Paket verwenden, um Webformulare auszufüllen und zu senden und die Ergebnisse abzurufen.

Der folgende Code RSelenium Nutzung werden die Daten für ein Beispiel Eingabe herunterladen (männlich, unter 18 Jahren, Longbow, Bristol 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() 

Der Standard-Browser für RSelenium ist Firefox. RSelenium unterstützt jedoch sogar Headless Browsing mit PhantomJS. Für PhanomJS Nutzung müssen Sie nur

  • download PhantomJS und legen Sie sie in den Benutzer-Pfad
  • die Code-Schnipsel zu Beginn ersetzen und am Ende wie beschrieben nächste

Standard-Browsing (wie oben gezeigt):

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

... 

remDrv$quit() 
remDrv$closeServer() 

Headless-Browsing:

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

... 

remDrv$close() 
pJS$stop() 
+0

Aus dem Quellcode, woher wusstest du: using = "xpath", "// input [@value = 'Male']" ?? Wie würde ich wissen, wie man Text auf dieser Webseite ausfüllt: https://ois.dk/ –