Codigo vba para hacer 1000 busquedas automaticas en aplicaciones.msp.gob.ec/coresalud/app.php/publico/rpis/afiliacion/consulta

Necesito en Excel (vba) hacer una macro o robot para ingresar unos datos en una pagina web tomando como valores un listado de data (cedula y fecha) que tengo en una hoja de Excel, esos parámetros ya lo logre pasar al formulario con esta elemento "IE.Document.getElementById", pero al intentar darle click al botón que aparece para poder completar la operación que quiero veo que el botón como tal no tiene variable id o el name para poder hacer el click desde Excel.

Dejo la pagina web a la que intento acceder:

https://aplicaciones.msp.gob.ec/coresalud/app.php/publico/rpis/afiliacion/consulta

Hasta aqui la pagina busca solo la cedula que ingreso pero necesito que seleccione por si sola el siguiente numero de mi lista (cerca de 1000), y que cada busqueda copie los datos en una hoja diferente.

Esto e lo que he hecho hasta ahora

Sub CARGAR_DATOS_WEB()
 Dim ie As Object
 Dim allelements As Object
 Application.ScreenUpdating = False
'Creamos objeto internet explorer
 Set ie = CreateObject("InternetExplorer.Application")
 'abrimos web
 ie.navigate "https://aplicaciones.msp.gob.ec/coresalud/app.php/publico/rpis/afiliacion/consulta"
'esperamos a que se carguen todos los elementos
 Do Until ie.READYSTATE = 4
 DoEvents
 Loop
'si necesitamos más tiempo lo podemos configurar aquí
  Application.Wait (Now + TimeValue("0:00:01"))
'localizamos el ID que hace referencia al cuadro de búsqueda
 'esto lo hacemos buscando en el código HTML de la página web
 'e igualamos el valor de la celda para realizar la búsqueda
 ie.document.getElementById("identificacion").Value = "0105822712"
 ie.document.getElementById("fechaconsulta").Value = "12-12-2018"
'también buscamos ID correspondiente al botón para buscar el valor
ie.document.getelementsbytagname("button")(1).Click
'hacemos visible la web.
 Ie.Visible = False
 Set ie = Nothing
 Application.ScreenUpdating = True
 End Sub

1 Respuesta

Respuesta
1

[Hola

¿A qué botón te refieres? Tal cual lo has puesto por supuesto que entrega datos:

Por cierto, mencionas que deseas copiar los datos a hojas pero no has incluido la forma en que vas a hacerlo. Al ser datos que "aparecen" quizá también te refieres a que no sabes cómo lograrlo ¿o me equivoco?

Abraham Valencia

Hola ya conseguí que me de información, pero necesito que el numero de cedula se cargue automáticamente de una lista que tengo en la hoja 1 y armar ua tabla con todos los resultados obtenidos, tomando en consideración que solo me son útiles los datos de la primera fila de la tabla del resultado.

Por cierto no he conseguido ninguna forma de copiar los datos todavía.

[Hola nuevamente

Antes de ver lo de tu bucle de 1000, creo que lo primero es que veas como se extraen los datos. Dado que es una tabla del tipo "responsive" con "Bootstrap", hay que meterle un poco de código no tan "común". Ojo, he hecho que los datos extraidos se vean en un "MsgBox" como para que te des idea, trata de pasarlo a una hoja (para comenzar con los datos de uno solo, en este caso):

Sub ExtraerDatos()
Dim IE As Object
Dim r As Long, c As Long
Dim elementsTable As Object, elementsTableDiv As Object
Set IE = CreateObject("InternetExplorer.Application")
 'abrimos web
IE.navigate "https://aplicaciones.msp.gob.ec/coresalud/app.php/publico/rpis/afiliacion/consulta"
'esperamos a que se carguen todos los elementos
Do Until IE.readyState = 4
    DoEvents
Loop
'si necesitamos más tiempo lo podemos configurar aquí
Application.Wait (Now + TimeValue("0:00:01"))
'localizamos el ID que hace referencia al cuadro de búsqueda
 'esto lo hacemos buscando en el código HTML de la página web
 'e igualamos el valor de la celda para realizar la búsqueda
IE.Document.getElementById("identificacion").Value = "0105822712"
IE.Document.getElementById("fechaconsulta").Value = "12-12-2018"
'también buscamos ID correspondiente al botón para buscar el valor
IE.Document.getElementsByTagName("button")(1).Click
'hacemos visible la web.
IE.Visible = True
Do While elementsTableDiv Is Nothing
    Set elementsTableDiv = IE.Document.getElementsByClassName("table-responsive")
    DoEvents
Loop
Do While elementsTableDiv(0) Is Nothing
    DoEvents
Loop
Set elementsTable = elementsTableDiv(0).getElementsByTagName("TABLE")
For r = 1 To (elementsTable(0).Rows.Length - 1)
    For c = 0 To (elementsTable(0).Rows(r).Cells.Length - 1)
        MsgBox elementsTable(0).Rows(r).Cells(c).innerText
    Next c
Next r
Set elementsTableDiv = Nothing
Set elementsTable = Nothing
Set IE = Nothing
End Sub

No cierres el "Internet Explorer" hasta que hayas visto todos los "MsgBox".

Abraham Valencia

hola, mucgas gracias, por el dato. 

En este caso pego toda la pagina por que me piden un archivo con todas las búsquedas realizadas y otro solo con ciertos datos, pero tu información me ayudo mucho.

Si puedes ayudarme a depurar, aquí necesito que se llene automáticamente con el valor de la celda A2 siempre, pero corro la macro y me da un error 438

Este es el original
IE.Document.getElementById("identificacion").Value = "0105822712"
lo cambie por este
ie.document.getElementById("identificacion").Worksheets("Hoja2").Range("A2").Select

Perdón por ser tan básico en la programación pero me piden que le explique como lo hice y si lo complico no me entiende, gracias si puedes ayudarme con esto.

[Hola nuevamente

Mira, cámbialo así:

ie.document.getElementById("identificacion").Value = Worksheets("Hoja2").Range("A2").Value

Saludos]

Abraham Valencia

Hola disculpa, he realizo toda la macro pero al ejecutarla ya con todos los registros me da un error de automatización en la línea

Set ie = CreateObject("InternetExplorer.Application")

No puedo corregirlo

¿Te ocurre en todas las ocasiones o solo a veces? Si la respuesta es "a veces" quizás estás activando la macro muy seguido y/o muchas veces ¿o hay algún detalles que falte comentar?

Abraham Valencia

Busco solo los 7 primeros y de allí en adelante el error es constante

¿Siempre es después y/o al séptimo? De ser así mira que datos son el 6, 7 y 8 e ingrésalos de manera normal en la web y verifica que ocurre. Si todos pueden ser ingresados sin problema, quizá convenga agregar antes de los "Set" con "Nothing":

ie.Close

y/o

Ie. Quit

Coementas

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas