【问题标题】:Submitting form from R to mixed HTML and Javascript将表单从 R 提交到混合的 HTML 和 Javascript
【发布时间】:2015-08-20 16:11:15
【问题描述】:

我正在尝试从 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 和参数运行 getForm 之类的东西,在结果页面中搜索指向 .csv 的链接,然后在该 url 上运行 read.csv()。

我的背景是 R,对 HTML 和 Javascript 的了解非常非常少。查看过去的问题,看起来最好是 RSelenium、RCurl 或 httr,或者其他包。任何建议或相关问题的链接表示赞赏!

【问题讨论】:

    标签: javascript html r rcurl httr


    【解决方案1】:

    我希望这会有所帮助:

    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 配置文件。

    【讨论】:

      猜你喜欢
      • 2022-12-07
      • 1970-01-01
      • 2013-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 2016-02-04
      相关资源
      最近更新 更多