感谢您对此感兴趣。
繁琐的任务使我了解了一些药物的来源国,因为这些药物已在哥伦比亚食品药品监督管理局注册。该机构使用的网站带有javascript(扩展名为.jsp),我想知道是否可以自动执行该过程。这是查找的逐步步骤:
我完全不知道这是否可以实现,如果可以的话,如何实现。因此,不胜感激任何可以使我从任何方向开始的指南(除了我现在手头的指南:用手看它们!)。我熟悉R和一些VB,但是如果可以使用其他任何语言,我会尝试一下。
我尝试过的
谢谢!
我已经使用phantomjs与RSelenium包装。有关如何设置的详细信息,请phantomjs参见http://cran.r-project.org/web/packages/RSelenium/vignettes/RSelenium- saucelabs.html#id2a phantomjs,无需此处的Selenium Server详细信息即可直接进行驱动。由于它无头的性质,因此对于您概述的任务应该更快。
phantomjs
RSelenium
您的问题的第一部分可以实现如下:
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()
现在,表格已填写,单击链接。数据位于的iframe中name="datos"。iframe需要切换为:
name="datos"
# 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:
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