关闭。这个问题需要更多 focused .它目前不接受答案。
想改进这个问题?更新问题,使其仅关注一个问题 editing this post .
7年前关闭。
Improve this question
感谢您对此感兴趣。
我被赋予了[繁琐的]任务来查看某些药物的原产国,因为它们已在哥伦比亚食品和药物管理局注册。该机构使用带有 javascript(.jsp 扩展名)的网站,我想知道是否可以自动化该过程。
这是查找的一步一步:
我不知道这是否可以实现,如果可以,如何实现;所以我很感激任何能让我从任何方向开始的指导(除了我现在手头的那个:用手看他们!)。我熟悉 R 和一些 VB,但如果可以用任何其他语言,我会试一试。
我试过的:
谢谢!
最佳答案
我用过phantomjs
与 RSelenium
包裹。有关如何设置的详细信息 phantomjs
可以在 http://cran.r-project.org/web/packages/RSelenium/vignettes/RSelenium-saucelabs.html#id2a 找到phantomjs
可以直接驱动,无需 Selenium 服务器详细信息 here .由于它的 headless 性质,它应该更快地完成您概述的任务。
您问题的第一部分可以实现如下:
appURL <- "http://web.sivicos.gov.co:8080/consultas/consultas/consreg_encabcum.jsp"
library(RSelenium)
pJS <- phantom()
remDr <- remoteDriver(browserName = "phantom")
remDr$open()
remDr$navigate(appURL)
# Get the third list item of the select box (MEDICAMENTOS)
webElem <- remDr$findElement("css", "select[name='grupo'] option:nth-child(3)")
webElem$clickElement() # select this element
# Send text to input value="" name="expediente
webElem <- remDr$findElement("css", "input[name='expediente']")
webElem$sendKeysToElement(list(2203))
# Click the Buscar button
remDr$findElement("id", "INPUT2")$clickElement()
现在已经填写了表格并点击了链接。数据位于带有
name="datos"
的 iframe 中.iframes需要切换到:
# switch to datos iframe
remDr$switchToFrame(remDr$findElement("css", "iframe[name='datos']"))
remDr$findElement("css", "a")$clickElement() # click the link given in the iframe
# get the resulting data
appData <- remDr$getPageSource()[[1]]
# close phantom js
pJS$stop()
iframe 的数据现在包含在
appData
中。 .作为示例,我们使用简单的提取函数 readHTMLTable
查看第三个表。 :readHTMLTable(appData, which = 3)
V1 V2 V3 V4 V5 V6
1 Presentacion Comercial <NA> <NA> <NA> <NA> <NA>
2 Expediente Consec Termino Unidad / Medida Cantidad Descripcion
3 000002203 01 0176 ml 60,00 FRASCO AMBAR POR 60 ML
4 000002203 02 0176 ml 120,00 FRASCO AMBAR POR 120 ML
5 000002203 03 0176 ml 90,00 FRASCO AMBAR POR 90 ML
V7 V8 V9
1 <NA> <NA> <NA>
2 Fecha insc Estado Fecha Inactiv
3 2007/01/30 Activo
4 2007/01/30 Activo
5 2012/03/15 Activo
关于javascript - 使用R从javascript中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27305824/