将表单从R提交到混合HTML和Javascript

时间:2015-08-20 16:11:15

标签: javascript html r rcurl httr

我正在尝试将查询从R提交到http://revigo.irb.hr/,我很难过。看起来页面是HTML和Javascript的混合,这使得简单的postForm()解决方案变得复杂。查询是一个字符串(或字符串列表),如" GO:0004432",结果页面有一个链接"将结果导出到文本表(CSV)"以.csv格式下载数据。使用httr的以下代码似乎没有从提交查询后出现的页面返回任何内容:

library(httr)
url <- "http://revigo.irb.hr/" 
fd <- list(
    submit = "Start Revigo",
    goList1="GO:0004432"
)
resp<-POST(url, body=fd, encode="form")
resp

Response [http://revigo.irb.hr/]
Date: 2015-08-20 15:57
Status: 200
Content-Type: text/html;charset=UTF-8
Size: 18.5 kB

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title> REVIGO summarizes and visualizes long lists of Gene Ontology terms...
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" href="styles.css" type="text/css"></link>
    <script type="text/javascript" src="js/jQuery/jquery-1.4.1.min.js" >       </scri...
<script type="text/javascript" src="js/jQuery/jquery.qtip-1.0.0-rc3.min.js...

如何处理这样的任务?我想工作流看起来像: 获取URL,分配参数(textarea,单选按钮等,提交按钮),使用url和params运行getForm之类的东西,搜索结果页面以获取.csv的链接,并在该URL上运行read.csv()。

我的背景是在R中,对HTML和Javascript的理解非常非常简单。看看过去的问题,它看起来像RSelenium,RCurl或httr,或其他包是最好的。任何建议或相关问题的链接都表示赞赏!

1 个答案:

答案 0 :(得分:2)

我希望这会有所帮助:

require(RSelenium)
url <- "http://revigo.irb.hr/"
checkForServer()
startServer()
fprof <- getFirefoxProfile("firefoxprofile",useBase = TRUE)
remDr <- remoteDriver(browserName="firefox",extraCapabilities = fprof)
remDr$open()
remDr$navigate(url)
webElem <- remDr$findElement("id","goList1")
keys <- c("GO:0042273","GO:0009853")
for (gene in keys){
  webElem$sendKeysToElement(list(gene,key="enter"))
}
webElem <- remDr$findElement("name","startRevigo")
webElem$clickElement()
webElem <- remDr$findElement(using="xpath","/html/body/div[1]/div[1]/div[2]/form/table/tbody/tr[1]/td[2]/a[1]")
webElem$clickElement()
remDr$setImplicitWaitTimeout(5000)
table1 <- read.csv("REVIGO.csv")
file.remove("REVIGO.csv")
remDr$close()

这里我使用了一个firefox配置文件,其中包含的信息是,无论何时下载csv文件,它都会自动下载到工作目录中。我建议您使用makeFirefoxProfile和passisng参数

创建类似的配置文件
fprof <- makeFirefoxProfile(list(browser.download.dir = getwd(),
                                 browser.download.manager.showWhenStarting = FALSE,
                                 browser.helperApps.neverAsk.saveToDisk = "text/csv"))

或者你可以像我在这里使用 getFirefoxProfile()一样使用现有的firefox配置文件。