Extraer información de Internet Explorer desde Excel con VBA

publicado por: Anonymous

Tengo un código que estoy haciendo en VBA para que simule a un usuario ponga usuario, password y de enter, después que llene un formulario con información y de enter, después cuando tenga la información lista copie y pegue elementos en en la hoja de Excel.

Sub navegación()

Dim ie As InternetExplorer
Dim pagina As HTMLDocument
Dim pagina2 As HTMLDocument
Dim pagina3 As HTMLDocument

'crea el explorador de internet lo puse como Medium que InternetExplorer no me cargaba
Set ie = New InternetExplorerMedium

'hacemos visible el explorador
ie.Visible = True

'navega a la página
ie.navigate "URL para poner usuario y contraseña"

'espera a que la página cargue
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE

'la página cargada la asignamos a la variable "pagina"
Set pagina = ie.document

'asignamos el valor del usuario
pagina.getElementById("userName").Value = Range("B1").Value

'esperamos un segundo para que puedas visualizar los cambios que estas realizando
Application.Wait (Now + TimeValue("0:00:02"))

'pasamos la contraseña
pagina.getElementById("passwd").Value = Range("B2").Value
Application.Wait (Now + TimeValue("0:00:02"))

'seleccionamos el botón de buscar y hacemos click
pagina.getElementsByClassName("button")(0).Click

'asignamos a una variable el estado de la página
stat = pagina.readyState

'Espera a que la página cargue
Do While stat = "loading"
    Application.Wait (Now + TimeValue("0:00:01"))
    stat = pagina.readyState
Loop

'Aquí hago la comparación porque el URL cambia después de que entra ya a la intranet.
If pagina.Url <> "URL para poner usuario y contraseña" Then

'Asignamos el nuevo URL
ie.navigate "URL para ingresar datos para consulta"

'Esperamos a que cargue
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
End If

'la página cargada la asignamos a la variable "pagina2"
Set pagina2 = ie.document

'Agregamos comprador.
pagina2.getElementById("fif1").Value = Range("B3").Value
Application.Wait (Now + TimeValue("0:00:02"))

'Agregamos vendedor.
pagina2.getElementById("fif2").Value = Range("B4").Value
Application.Wait (Now + TimeValue("0:00:02"))

'Agregamos numero de producto.
pagina2.getElementById("fif3").Value = Range("B5").Value
Application.Wait (Now + TimeValue("0:00:02"))

'Acemos click para que busque la información.
pagina2.querySelector("input[type=submit]").Click
Application.Wait (Now + TimeValue("0:00:02"))

'asignamos a una variable el estado de la página
stat2 = pagina2.readyState

'Espera a que la página cargue
Do While stat2 = "loading"
    Application.Wait (Now + TimeValue("0:00:01"))
    stat2 = pagina2.readyState
Loop

'Condicional porque después de la búsqueda de nuevo cambia el URL
If pagina2.Url <> "URL para ingresar datos para consulta" Then

'Asignamos el nuevo URL
ie.navigate "URL con datos a extraer"

'Esperamos a que cargue
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
End If

'la página cargada la asignamos a la variable "pagina3"
Set pagina3 = ie.document

aquí es donde me genera error, no se como traer la información de la pagina y inspeccionando los elementos el HTML está abajo, el error que me genera es que corre sin error pero al final no me da el resultado que quiero, sólo pone un texto que dice [object].

'aquí declaro el valor que quiero traer para después poner la información en el.
Dim CP As String

'Declaro la colección de elementos que me devolvera querySelectorAll
Dim coleccionDeAlgo As IHTMLDOMChildrenCollection

'Obtener todas las etiquetas td y la clase
pagina3.querySelectorAll ("td.resultBlack")

'pagina3 con todas las etiquetas cargadas se convierte a una colección
Set coleccionDeAlgo = pagina3.querySelectorAll("td.resultBlack")

'primer valor que queremos extraer
CP = coleccionDeAlgo(0)
Range("B6").Value = CP

End Sub

Estoy buscando extraer texto especifico al final de varias etiquetas HTML y estos datos pegarlos en Excel en una celda en especifico, he buscado pero no encuentro información.

Este es el HTML en *** marque de donde quiero sacar la información, es una tabla que tiene 10 elementos con la misma estructura de etiqueta td y la clase resultBlack lo que quiero es poder sacar el numero que está al final entre help;">y </td>

<tbody><tr><td colspan="5" height="15"></td></tr>
<tr>
    <td width="40">&nbsp;</td>
    <td width="157" align="left"><span onmouseover="checkState()" onclick="getHelp(event,&quot;hlp_505&quot;)">C&nbsp;P&nbsp;(CP)</span></td>
    <td width="20">&nbsp;</td>
    ***<td class="resultBlack" onmouseover="checkState()" onclick="getHelp(event,&quot;hlp_505&quot;)" style="cursor: help;">1.1652</td>
    <td width="20">&nbsp;</td>***
</tr>

</tbody>

si hay alguna modificación extra a la forma de redacción o desarrollo del contenido también es bienvenida.

¿cómo se podría hacer lo anterior?

solución

Usa querySelectorAll el cual te va a devolver una colección. Para obtener cada uno de los elementos usa un índice, 0 para el primero, 1 para el segundo y así sucesivamente.

También tienes como alternativas el usar los otros selectores como getElementsByTagName, getElementsByClassName, etc. La selección depende de que tan bien conozcas la estructura de la página, lo cual debería ser uno de tus objetivos, la estructura misma de esta y tus preferencias personales.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *