Merci d'être intéressé par cela.
On m'a donné la tâche [fastidieuse] d'examiner quel est le pays d'origine de certaines médecines, car elles sont enregistrées auprès de l'administration colombienne des aliments et des médicaments. L'agence utilise un site Web avec un javascript (extension .jsp) et j'aimerais savoir s'il est possible d'automatiser le processus. C'est l'étape par étape de la recherche:
Je n'ai pas la moindre idée si cela pourrait être accompli, et si oui, comment; Donc j'apprécierais toute orientation qui me permette de commencer dans n'importe quelle direction (autre que celle que j'ai à portée de main maintenant: les regarder à la main!). Je connais R et certains VB, mais si cela est possible dans n'importe quelle autre langue, je vais essayer.
Ce que j'ai essayé:
Merci!
J'ai utilisé des phantomjs
avec le paquet RSelenium
. Vous trouverez des détails sur la configuration des phantomjs
à http://cran.r-project.org/web/packages/RSelenium/vignettes/RSelenium-saucelabs.html#id2a Les phantomjs
peuvent être directement phantomjs
sans avoir besoin de détails sur le serveur Selenium Ici . Il devrait être beaucoup plus rapide pour la tâche que vous décrivez en raison de sa nature sans tête.
La première partie de votre question peut être réalisée comme suit:
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()
Maintenant, le formulaire a été rempli et le lien a cliqué. Les données se trouvent dans un iframe avec name="datos"
. Les iframes doivent être basés sur:
# 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()
Les données de l'iframe sont maintenant contenues dans appData
. Par exemple, nous examinons le troisième tableau en utilisant la fonction d'extraction simple 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