感谢您对此感兴趣。
由于他们在哥伦比亚食品和药物管理局注册,我被赋予[乏味]任务以查看某些药物的原产国。该机构使用带有javascript(.jsp扩展名)的网站,我想知道是否可以自动化该过程。 这是查找的一步一步:
我不知道这是否可以实现,如果可以的话,我怎么做;所以我很感激任何允许我从任何方向开始的指导(除了我现在手头的那个:用手看它们!)。我熟悉R和一些VB,但如果它可以用任何其他语言,我会试一试。
我尝试了什么:
谢谢!
答案 0 :(得分:4)
我已将phantomjs
与RSelenium
包一起使用。有关如何设置phantomjs
的详细信息,请访问http://cran.r-project.org/web/packages/RSelenium/vignettes/RSelenium-saucelabs.html#id2a
phantomjs
可以直接驱动而无需Selenium Server详细信息here。由于其无头的性质,你应该更快地完成任务。
问题的第一部分可以通过以下方式实现:
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中。
iframe需要切换到:
# 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