有没有人曾经远程填写过网上表格?
我想用我的分数做一些射箭统计。有一个非常方便的网页,给你分类和障碍http://www.archersmate.co.uk/,我自然想包括在我的统计表。
是否可以远程填写此表单并将结果返回到R????
否则我就得把所有的残障表都存到数据库里。
更新:
我们将问题缩小到表单提交按钮是用javascript编写的。

最佳答案

您可以使用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的无头浏览。对于杠杆作用,你只需要
download PhantomJS并将其放置在用户路径中
替换开头和结尾的代码片段,如下所述
默认浏览(如上图所示):
checkForServer()
startServer()
remDrv <- remoteDriver()

...

remDrv$quit()
remDrv$closeServer()

无头浏览:
pJS <- phantom()
remDrv <- remoteDriver(browserName = 'phantomjs')

...

remDrv$close()
pJS$stop()

08-04 17:05