Autorrellenar Formulario Web Html desde Excel (Web form filling)

En este artículo vamos a ver cómo podemos rellenar un formulario web html desde Excel. En teoría es muy simple con el método “GetElementByID”, posible de utilizar en VBA.

Básicamente tenemos un formulario web, caracterizado por contener elementos, textbox’s (cuadro de textos), Combobox’s (cuadro de listas), ChekButton’s (botones de selección), y siempre hay un botón Aceptar, Enviar, Submit, etc., que envía, guarda o hace algo con los datos cargados.
Lo único que vamos a mostrar es cómo interpretar los datos necesarios en el código HTML para luego mediante un script (código) en Excel, desde la plataforma VBA, poder rellenarlo y enviarlo.
La utilidad de esto es relativa ya que últimamente es difícil encontrar un formulario que no contenga un código CAPTCHA o  de verificación  para ver que es una persona la que rellena el formulario y no una máquina (o un robot). Sin embargo en otro artículo mostraremos la utilidad que puede tener con Google Docs.


Click en la imagen para ver el video relacionado sino a través de este Link.


Recuerden que en el canal de YouTube “ExcelminiApps” están todos los videos que son complento del blog.

Como hacemos siempre vamos a utilizar una mini aplicación de ejemplo para mostrar la idea.
Básicamente tenemos un formulario web que queremos rellenar, en este caso vamos a utilizar el de “Crear Cuenta en Gmail” ya que nos permite mostrar el objetivo propuesto. Además contiene los elementos necesarios.
El formulario en cuestión tiene varios campos pero en este caso vamos a remitirnos a dos porque es un ejemplo, y al botón enviar o aceptar que en este caso se llama “siguiente”.



Los datos que necesitamos son los ID’s que  son nombres o strings únicos en el código que representan a cada elemento. Debemos identificar en este caso tres, el que corresponde al “nombre”, el que corresponde al “apellido” y el que corresponde al botón “siguiente”.
En realidad para hacer esto no hay que saber leer el código ni nada, podemos usar las “herramientas de desarrollador” que nos ofrece el explorador. En este caso es Internet Explorer pero para las nuevas versiones de Windows es “Edge”.


Una vez que tenemos abierta la herramienta, con el cursor buscando el elemento que queremos identificar, lo señalamos y revisamos la información que necesitamos.



Como ven también tenemos todas las propiedades del elemento, en este caso solo nos importa el id. Que en este caso esta identificado en la línea sombreada con rojo como “firstname”.
Para el caso del apellido  con el mismo procedimiento encontramos que el id es “lastname” y para el caso del boton es “submitbutton”.



Con esta información ya podemos crear el script o codigo en excel.

Procedimiento
Nuestros datos son:
·         Caja de Texto de “Nombre”  id: firstname
·         Caja de Texto de “Apellido” id: lastname
·         Boton “siguiente” id: submitbutton

Código
El código de la macro sería el siguiente, en este caso definimos las variables directamente en el código, es decir, el nombre “juan”, el apellido “pablo”, pero podemos utilizar todas las posibilidades que nos da excel, obtener los datos de una celda, de un formulario, de una base de datos, etc.

INICIO CODIGOS----------------------------------------
Sub RellenarFormWEB()
'www.excelminiapps.com
'Este codigo sirve para rellenar un formulario web con el methodo GetElement
Dim IE As Object
'creamos el objeto para el navegador Internet Explorer
Set IE = CreateObject("InternetExplorer.application")
'dentro del navegador de internet explorer, accedemos a la página donde esta el formulario HTML
'en la celda D5 esta la dirección
IE.Navigate “https://accounts.google.com/SignUp”
Do
DoEvents
Loop Until IE.readystate = 4 'verifico si cargo correctamente la página
  'Completo los elementos del formulario por ID
IE.Document.getElementById("FirstName").Value = “Juan”
IE.Document.getElementById("LastName").Value = “Pablo”
'Ahora ubico el boton de submit o enviar, en este caso:
IE.Document.getElementById("submitbutton").Click
  'finalmente hacemos visible la ventana de Internet Explorer
IE.Visible = True
 End Sub
------------------------------------------------------
Este código rellena solo los campos de nombre y apellido pero como no rellena el resto de los campos, al ejecutar la macro nos mostrara un error:


Si podemos mostrar la imagen de CAPTCHA también desde Excel el usuario podría introducir este elemento.
¡Esperamos que les haya gustado la idea y vean lo fácil que es!
-------------------------------------- FIN CÓDIGOS

Recuerden que los artículos algunas veces requieren un mayor o menor nivel de conocimiento en ciertos temas de Excel, por ejemplo formulas avanzadas, macros o VBA, etc. Sin embargo en los artículos se nombran todos los elementos y con esta información podemos hacer nuestras pequeñas investigaciones usando internet, así desarrollamos nuestro conocimiento. Por ejemplo si  utilizamos la función “Y”, que la suponemos conocida, y no sabemos ¿qué es? podemos buscar en internet para ver como se utiliza y cuáles son los componentes. Las mini aplicaciones no son más que la recopilación de muchos elementos para dar forma a una nueva idea.

Pueden descargar algunos ejemplos (plantillas/templates) de la zona de Descargas. Si tienen alguna duda o consulta pueden hacerlo a través del formulario de contacto.
Les recomendamos que sigan el blog por alguno de los medios, mail o por redes sociales, para recibir las actualizaciones y novedades.
¡Éxitos!

Keys:
·         VBA to Enter Data Online and Submit Form
·         Populate HTML form using Excel/VBA
·         Populate Internet Textbox, Fill Forms, click Submit using Excel
·         Automatic Form Filling using data stored in an Excel file
·         Excel - Populate Html Form Using Excel/vba.
·         Rellenar formulario Web con Excel
·         Rellenar formulario HTML con VBA en Excel.

26 comentarios:

Unknown dijo...

Hola, qué pasa si quiero llenar el formulario de una página que ya está abierta.

Excelminiapps dijo...

Hola amigo, cómo estas! No sé puede con este metodo ya que el código no puede identificar que formulario es sino lo abre e identifica antes de la acción.
Esperamos tus comentarios.
Saludos

Unknown dijo...

Hola, disculpa, pero tu crees que me podrías decir con que método lo podría hacer?, ya que haciendo éste método tengo ciertos límites, como por ejemplo, ventanas emergentes, javascrips, etc.

SIMITI dijo...

Hola, disculpa como hago para que me aparezca la imagen en excel de color azul y el boton buscar

Excelminiapps dijo...

Hola amigo, cómo estas! Gracias por comentar!
Con respecto a tu consulta, si ves otros artículos anteriores del blog seguramente mostramos cómo hacerlo. De otra manera esta dentro de los controles de la pestaña "programación". Saludos

Unknown dijo...

Muy buena la explicación!
Lo que me falta es como tendría que hacer si quisiera obtener para el ejemplo que explicaste el resultado que dice "no puedes dejar este campo en blanco" del mail y pasarlo a la celda A8 del Excel.
Lo estoy necesitando para otro programita que estoy intentando hacer.
Figura en la pagina de https://accounts.google.com/SignUp
con el id="errormsg_0_GmailAddress"

GRACIAS!!

Unknown dijo...

Hola Juan Pablo, como está ?
Tengo un trabajo en cual creo que usted me podría ayudar, por favor contacteme a mi correo omamanolito@gmail.com o mi whatsapp +5353988815 para explicar en qué consiste. Saludos Manolo

Unknown dijo...

Hola a todos,necesito que me ayuden a llenar un formulario online de forma automática. Busco alguien que tenga conocimiento para esto pues lo necesito lo antes posible, la página es la siguiente: https://mexitel.sre.gob.mx/citas.webportal/pages/public/login/login.jsf

Primeramente deberan registrarse para entrar y luego verán el formulario y sus particularidades.
Las personas interesadas en hacer este trabajo por favor comunicarse conmigo al siguiente correo omamanolito@gmail.com o mi whatsapp +5353988815. Gracias de antemano Manolo

Unknown dijo...

Excelente material, pero tengo un problema al cargar este código en VBA 2007, siempre me arroja un error de automatización #424 al utilizar el método Document.getElementById. Me gustaría que explicaran que se puede hacer para que no se produzca dicho error. Gracias.

Unknown dijo...

Hola, como se puede hacer para seleccionar de una lista desplegable desde excel. Por ejemplo en ese formulario que usas como ejemplo como seleccionar el pais, el sexo, o el mes de nacimiento? Gracias!!!

Excelminiapps dijo...

Hola amigos, cómo están! Gracias por comentar!
Disculpa por la tardanza. Hay veces que hay que probar porque las versiones de excel pueden tener cambios. Y por otro lado, algunas cosas que nosotros usamos en la mini aplicaciones las pueden buscar en otros tutos que pueden encontrar. Cualquier consulta nos pueden escribir mediante el formulario de contacto.
Saludos

Reyes Card dijo...

Muy buenos dias disculpa quisiera llenar una pagina q ya esta abierta ya q tengo q llenar 500 registros y no quiero q se abra 500 veces la pagina a ver si me pueden ayudar gracias

Excelminiapps dijo...

Hola amigo! Gracias por escribirnos!
En cuanto a tu consulta, no hemos intentado esa acción, creemos que es posible. Habría que investigar un poco y hacer unas pruebas. Seguramente en internet algo hay.
Esperamos tus comentarios.
Saludos

Unknown dijo...

Hola! como estas? es muy bueno esto que estas enseñando! muy util! pero se me vino otra cosa a la cabeza, es posible extraer un resultado desde la misma pagina? porque rellenar el formulario y "presionar" el botón para verificar los datos implica que tenga una respuesta, es posible recibir esta respuesta en excel?

Unknown dijo...

Hola Como estas? me parecio muy util, aunque el objeto de internet explorer falla al presionar el boton y no es la macro es porque el internet explorer no hace nada al presionarlo, se puede cambiar para utilizar Edge?

luis dijo...

Hola muchas felicidades por tu articulo, es muy interesante, soy un novato en vba y al copiar tu código me da un error de compilación /sintaxis me marca en rojo la línea IE.Navigate “https://accounts.google.com/SignUp”

me imagino que será una tontería, te agradecería mucho que me dijeras como puedo solucionarlo

Muchas gracias

luis dijo...

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

Excelminiapps dijo...

Hola amigo, cómo estas! Gracias por escribirnos!
En cuanto a tu consulta, tu código esta perfecto. El tema es que con flash no tienes los elementos dentro del código para seleccionar como en el caso de HTML, no podrás usar este método. Para que te funcione el las funciones de SendKeys deberías usar una aplicación fuera del Excel para que quizas funcione.
Saludos

Simovi dijo...

Hola buenas tardes, tengo una pregunta a ver si me pueden ayudar ya que he leído este blogg y creo que es aquí donde puedo conseguir ayuda ya que mi caso es parecido al que han publicado varios de ustedes:

Quiero convertir un trabajo manual repetitivo en algo automatizado, un ejemplo publicar un articulo en una pagina de venta, y estoy colocando la siguiente sentencia en VisualBasic pero no me deja avanzar porque el menú principal es un menú desplegable, osea a medida que voy seleccionando una opción van apareciendo otras para seleccionar... en fin las sentencias que estoy utilizando son las siguientes:


Sub Pdor_I_E ()


Dim IE As Object
Dim CeldaActual As Range


Set CeldaActual = ActiveCell
Set IE = CreateObject("InternetExplorer.application")

URL = "https://vender.sanchopanza.com/sell/sell?execution=e1s1&category=ZLA1459"

IE.Navigate URL

IE.Visible = True

'Application.Wait (Now() + TimeValue("00:00:20"))

Do

DoEvents

Loop Until IE.readystate = 4

'Application.Wait (Now() + TimeValue("00:00:10"))


!No me deja avanzar desde este punto!

[[[ IE.Document.getElementById("categoryTree.categId").Select ]]]

¡ No me deja avanzar desde este punto¡




'Application.Wait (Now() + TimeValue("00:00:05"))


IE.Document.getElementById("Inmuebles|Apartamentos").Select
'Application.Wait (Now() + TimeValue("00:00:04"))

IE.Document.getElementById("MLV1474").Select
'Application.Wait (Now() + TimeValue("00:00:05"))

IE.Document.getElementById("_eventId_next").Click

IE.Visible = True

End Sub



Muchas gracias de antemano por su ayuda...

Excelminiapps dijo...

Hola amigo, cómo estás! Gracias por escribirnos!
En cuanto a tu consulta, cada caso es particular y habría que analizar qué se puede hacer. El objetivo de este artículo era mostrar un ejemplo y la funcionalidad.
Esperamos tus comentarios.
Saludos

Unknown dijo...

hola disculpen mi consulta seguramente muy basica
el codigo lo adapte a mi necesidad y resulto pude saltear la primera pagina en donde pide el usuario y presionar el boton luego me lleva a la segunda pagina ambas xhtml
en donde pense que repitiendo estas lineas modificando los nombres de los nuevos id pero no hace nada
me estaria faltando algo pero no se que puede ser
Do
DoEvents
Loop Until IE.readystate = 4
Application.Wait (Now + TimeValue("0:00:01"))


IE.Document.getelementbyid("F1:password").Value = "xxxx"
IE.Document.getelementbyid("F1:btnIngresar").Click
IE.Visible = True

End Sub

Excelminiapps dijo...

Hola amigo, cómo estás! Gracias por comentar.
Hay que ir probando, el nombre del control esta raro "F1:password". Revisa bien eso.
Saludos

luis dijo...

Hola que tal, al ejecutar el codigo me sale un error en una ventana .. que se requiere un objeto,,, el codigo es:

Sub RellenarFormWEB()
'www.excelminiapps.com
'Este codigo sirve para rellenar un formulario web con el methodo GetElement
Dim IE As Object

'creamos el objeto para el navegador Internet Explorer
Set IE = CreateObject("InternetExplorer.Application")

'dentro del navegador de internet explorer, accedemos a la página donde esta el formulario HTML
'en la celda D5 esta la dirección
IE.Navigate Range("E4").Value

Do
DoEvents
Loop Until IE.readystate = 4 'verifico si cargo correctamente la página
'Completo los elementos del formulario por ID
IE.Document.getElementById("precalif:nssTitular").Value = Range("E7").Value
IE.Document.getElementById("precalif:fechaTitular").Value = Range("E8").Value
'Ahora ubico el boton de submit o enviar, en este caso:
IE.Document.getElementById("precalif:j_id1653908522_1_4545a122").Click
'finalmente hacemos visible la ventana de Internet Explorer
IE.Visible = True


End Sub

Excelminiapps dijo...

Hola, cómo estás? Gracias por escribirnos!
En cuanto a tu consulta, el código no asegura que funcione bajo cualquier página. Puede ser que en algunas no funcionen porque están codificadas de otra manera. En este caso revisa los ID para ver si existen en la página sino tienes que buscar otro tag que te sirva.
Un saludo

Unknown dijo...

hola que tal me podrias dar tu contacto es que necesito urgente automatizar una pagina para llenar unos formularios queria mirar a ver si puedes hacerlo para contratar tus servicios mi movial es +34 658258425 de Madrid España escríbeme a whatsapp

Excelminiapps dijo...

Hola, cómo estás? Gracias por escribirnos!
Actualmente no estamos tomando trabajos, sin embargo si es sencillo quizás te podamos ayudar. Debes escribirnos a través del formulario de contacto.
Saludos