Llenar formulario web desde Excel – TagName

Hola a todos mis seguidores! El día de hoy veremos cómo llenar formulario web desde Excel

Pertenezco a varios grupos de Facebook, y en uno de ellos hicieron una consulta sobre cómo completar información en un formulario web

Este usuario quería realizar un login en la web https://web.zurichseguros.com.co/zcc-web-app/login, pero usando la conexión ‘normal’ con id o name no podía

Formulario web excel vba

Es decir utilizando a getElementById, getElementsByName o getElementsByClassName el usuario no podía acceder a los elementos

Y veamos por qué con el inspeccionador de elementos

Formulario inspeccionar elementos excel

Como podemos visualizar, el lugar en donde debemos ingresar la información no tiene elementos id ni name

Sólo tiene elementos class, pero por la estructura que tiene no nos ayuda

Entonces cómo podremos llenar un formulario web desde Excel, en este tipo de casos?

La respuesta es utilizando al elemento getElementsByTagName

Muy bien! Explicaré cómo realizar el llenado para el login en 3 sencillos pasos

Paso #1 – Código base de conexión VBA para conectarse a una web

Primero debemos crear el código base de conexión a internet desde Excel VBA


Sub Navegar()
    Dim IE As Object
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Navigate "https://web.zurichseguros.com.co/zcc-web-app/login"
    Do Until IE.ReadyState = 4
     DoEvents
    Loop

    IE.document.getXXXXX

    IE.Visible = True
    Set IE = Nothing
End Sub

En este caso ya estoy asignando al Navigate la web de destino

Sólo por ser un ejemplo he asignado el valor True a IE.Visible

Paso #2 – Obtener el identificador que necesitamos desde la web

Muy bien en este paso debemos obtener el identificador necesario para que nuestro código funcione bien

Clic sobre el elemento en donde completaremos información y luego inspeccionar elemento

Formulario web desde excel
Excel VBA Internet getElementsByTagName

Debemos completar información en los dos input resaltados de amarillo

Desde Excel usaremos el métodogetElementsByTagName

El método getElementsByTagName nos permitirá interactuar con elementos que tengan el mismo nombre de etiqueta (En este caso input)

Pero tú me preguntarás en la página web que deseo llenar existen varios elementos input, cómo sabré cuál llenar?

Lo debemos completar por posición en el documento

Obtener la posición de la etiqueta en el formulario web

Lo primero que debemos hacer es obtener el código HTML de la página web

código HTML de la web VBA

En este caso obtenemos la siguiente vista

Codigo HTML VBA web scrap

En este caso no hemos obtenido el código que necesitamos (No encontramos ningún input)

Entonces debemos obtener el código de otra forma, lo haremos con inspeccionar elemento

Y daremos click derecho en la etiqueta principal <HTML>

Y procederemos a copiar el código fuente

código html excel vba

Lo pegamos en un notepad o en mi caso en Sublime Text

html completar formulario en web vba excel

Y procederemos a buscar los dos input (Usuario y contraseña), obteniendo lo siguiente:

  • Primer input: Checkbox con valor indefinido
  • Segundo input: Listbox de idiomas
  • Tercer input: Usuario
  • Cuarto input: Contraseña
  • Quinto input: Checkbox Recordarme

Para nuestro código VBA usaremos al TERCER y CUARTO input

Ahora debemos trabajar de manera similar con el botón Ingresar

etiqueta span desde excel vba

Vemos que la etiqueta con la que debemos trabajar es una del tipo span

Para asegurar qué elemento realiza el envío lo ideal es analizar el código JavaScript

Jh

De manera similar, buscamos la posición de los elementos span con Sublime Text

  • Primer span: Cierre
  • Segundo span: Checkbox
  • Tercer span: Botón
  • Cuarto span: Botón ingresar
  • Etc

Para el envío de información usaremos al CUARTO span

Paso #3 – Llenar formulario web desde Excel con las etiquetas obtenidas

Usaremos el tercer input, cuarto input y cuarto span de la web

Así que nuestro código quedará de la siguiente forma


Sub Navegar()
    Dim IE As Object
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Navigate "https://web.zurichseguros.com.co/zcc-web-app/login"
    Do Until IE.ReadyState = 4
     DoEvents
    Loop

    IE.document.getElementsByTagName("input")(2).innertext = "Jh Rojas"
    IE.document.getElementsByTagName("input")(3).innertext = "Contraseña"
    
    IE.document.getElementsByTagName("span")(3).Click

    IE.Visible = True
    Set IE = Nothing
End Sub

Y con este código ya podremos acceder a la web, sólo necesitamos ingresar los accesos correctos

Conexión a internet desde vba

Esta entrada tiene 5 comentarios

  1. Jose

    Hola Luis

    intento obtener la informacion de la tabla «Team Maches» de la pagin http://info.nowgoal.com/en/team/TeamSche/98.html, accedo por
    Set elemCollection = IE.Document.getElementsByClassName(«tdlink.sub-head.th-b»)
    prero luego no soy capaz de acceder a los valores de cada celda.
    Muchas gracias

  2. luis

    estoy intentando con una macro rellenar unos campos de un formulario web esta pagina web http://www.cortefilme.com.br/mapa.html tiene una parte en HTML y otra en flash los datos que tengo que rellenar son de la parte en flash, por lo que había pensado es ir aun campo HTML y después con sendkey y TAB acceder a los campos en flash , cuando lo hago manualmente me funciona bien, pero cuando lo hago a través de la macro en lugar de ir al primer campo flash se va a la barra de direcciones de internet explorer.
    Os adjunto el código por si hay alguien que me puede ayudar(soy novato en vba)

    Muchas gracias

    Sub lamina152()

    ‘ lamina152 Macro

    Dim IE As Object
    Dim CeldaActual As Range

    Set CeldaActual = ActiveCell
    Set IE = CreateObject(«InternetExplorer.application»)

    URL = «http://cortefilme.com.br/mapa.html»

    IE.Navigate URL
    IE.Visible = True

    Do

    DoEvents

    Loop Until IE.readystate = 4

    ‘Application.Wait (Now() + TimeValue(«00:00:06»))

    IE.document.getelementbyid(«aemail»).Select

    Call SendKeys(«1», True)
    ‘Application.Wait (Now() + TimeValue(«00:00:01»))
    Call SendKeys(«{TAB}», True)
    Call SendKeys(«{TAB}», True)

    Call SendKeys(«222», True)

    End Sub

    1. M4ster VBA

      Hola Luis, un gusto saludarte, te comento y oriento
      Cuando quieres hacer una consulta a una página web lo primero que debes analizar es la comunicación que existe, en la web que me enviaste la comunicación que yo puedo apreciar es un POST, el frontend efectivamente es HTML con Flash y el backend es un PHP, los parámetros son nome=Mr+Excel&email=mjh%40email.com&anome=Jhonatan&aemail=luis.rojasm%40correo.com&bt_enviar=Enviar y se envìa al PHP http://www.cortefilme.com.br/frm_indica2.php

  3. yordin

    buenas tardes una consulta, tengo un archivo parecido, en el cual puedo loggearme en los portales a los cuales necesito, pero requiero abrir chrome en ves de IE, habría posibilidades de hacer este cambio?

    1. Luis Rojas

      Hola Yordin, para poder conectarnos a Chrome lo podemos hacer con Shell, pero si deseas interactuar con la Chrome desde VBA, similar a lo que hice en este post, lo puede hacer con Selenium Basic
      Está disponible en GitHub https://github.com/florentbr/SeleniumBasic, interesante pregunta, más adelante haré un POST sólo relacionado a ello

Deja una respuesta