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.
27 comentarios:
Hola, qué pasa si quiero llenar el formulario de una página que ya está abierta.
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
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.
Hola, disculpa como hago para que me aparezca la imagen en excel de color azul y el boton buscar
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
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!!
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
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
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.
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!!!
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
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
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
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?
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?
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
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
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
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...
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
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
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
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
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
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
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
Sabrás como seleccionar una opción de lista desplegable. Todo va bien. Más no funciona con las listas desplegables y quisiera seleccionar una para automatizar un proceso de captura
Publicar un comentario