Aprenderemos hoy a rellenar un formulario o similar en HTML dentro de una web, empleando Internet Explorer (como complementario que es de Office) utilizando un simple código de VBA para Excel.
Para facilitar la comprensión, realizaremos una búsqueda en Google, ejecutando una macro desde nuestro Excel.
Veamos en primer lugar el código insertado en un módulo de nuestro Libro de trabajo:
Fundamental para el correcto funcionamiento es instalar la referencia Microsoft Internet Controls, desde el menú Herramientas > Referencias del editor de VBA:
Si lanzamos y ejecutamos nuestra macro, conseguiremos ver directamente:
Para comprender correctamente el código empleado, debemos saber localizar el Id o Name de los cuadros de texto o botones que vayamos a completar o presionar (clicar), siempre en un lenguaje HTML.. ya que otros formularios en script no son accesibles...
El primer paso, en la barra de direcciones del navegador (para este paso se recomienda o FireFox o Google Chrome), introduciremos la url indicada (en nuestro ejemplo: www.google.es).
En segundo lugar, con el botón derecho del ratón, seleccionaremos Inspeccionar Elemento sobre el 'cuadro de búsqueda':
Seguidamente se nos desplegarán, en la parte inferior del navegador unas ventanas con código HTML que refleja lo que vemos... remarcado en azul la parte de código que afecta al elemento clicado:
Y para el botón 'Buscar con google...' la misma acción, sobre él, presionamos botón derecho e Inspeccionar elemento:
fijémosnos en el código HTML de uno y otro elemento:
1-Para el cuadro de búsqueda...
input id="gbqfq" class="gbqfif" name="q" type="text" autocomplete="off" value="" aria-haspopup="false" role="combobox" aria-autocomplete="both" dir="ltr" spellcheck="false" style="border: none; padding: 0px; margin: 0px; height: auto; width: 100%; position: absolute; z-index: 6; left: 0px; outline: none; background: url(data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D) transparent;"
2- Para el botón de buscar...
button class="gbqfba" aria-label="Buscar con Google" id="gbqfba" name="btnK"
Es fundamental, para emplearlo en nuestro código VBA para Excel, localizar de cada elemento, la característica Id (o Name):
Para el cuadro de búsqueda: id="gbqfq" y name="q";
Para el botón: id="gbqfba" y name="btnK"
Por desgracia existen multitud de formularios en las diferentes web que no emplean HTML, o no tienen definidos estos parámetros Id o Name... pero merece la pena intentarlo.
Por supuesto los valores a incorporar, lo podemos extraer de nuestras celdas, por ejemplo en la línea:
IE.Document.getelementbyid("gbqfq").Value = "excelforo"
por
IE.Document.getelementbyid("gbqfq").Value = Range("A1").Value
Para facilitar la comprensión, realizaremos una búsqueda en Google, ejecutando una macro desde nuestro Excel.
Veamos en primer lugar el código insertado en un módulo de nuestro Libro de trabajo:
Sub RellenarWEBGoogle() 'www.excelforo.com Dim IE As Object 'creamos el objeto para el navegador Internet Explorer Set IE = CreateObject("InternetExplorer.application") 'dentro del navegador, accedemos al buscador Google (o cualquier otra wev con un formulario tipo HTML IE.Navigate "https://www.google.es/" Do DoEvents Loop Until IE.readystate = 4 'para completar el campo de búsqueda: 'código identificado en la url www.google.es: 'input id=gbqfq class=gbqfif name=q type=text autocomplete=off value="" IE.Document.getelementbyid("gbqfq").Value = "excelforo" 'para realizar la búsqueda presionamos el botón de Buscar.. ''código identificado en la url www.google.es: 'button class="gbqfba" aria-label="Buscar con Google" id="gbqfba" name="btnK" IE.Document.getelementbyid("gbqfba").Click 'IE.Document.All("btnK").Click otra forma de llamarlo.. 'finalmente hacemos visible la ventana de Internet Explorer IE.Visible = True End Sub
Fundamental para el correcto funcionamiento es instalar la referencia Microsoft Internet Controls, desde el menú Herramientas > Referencias del editor de VBA:
Si lanzamos y ejecutamos nuestra macro, conseguiremos ver directamente:
Para comprender correctamente el código empleado, debemos saber localizar el Id o Name de los cuadros de texto o botones que vayamos a completar o presionar (clicar), siempre en un lenguaje HTML.. ya que otros formularios en script no son accesibles...
El primer paso, en la barra de direcciones del navegador (para este paso se recomienda o FireFox o Google Chrome), introduciremos la url indicada (en nuestro ejemplo: www.google.es).
En segundo lugar, con el botón derecho del ratón, seleccionaremos Inspeccionar Elemento sobre el 'cuadro de búsqueda':
Seguidamente se nos desplegarán, en la parte inferior del navegador unas ventanas con código HTML que refleja lo que vemos... remarcado en azul la parte de código que afecta al elemento clicado:
Y para el botón 'Buscar con google...' la misma acción, sobre él, presionamos botón derecho e Inspeccionar elemento:
fijémosnos en el código HTML de uno y otro elemento:
1-Para el cuadro de búsqueda...
input id="gbqfq" class="gbqfif" name="q" type="text" autocomplete="off" value="" aria-haspopup="false" role="combobox" aria-autocomplete="both" dir="ltr" spellcheck="false" style="border: none; padding: 0px; margin: 0px; height: auto; width: 100%; position: absolute; z-index: 6; left: 0px; outline: none; background: url(data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D) transparent;"
2- Para el botón de buscar...
button class="gbqfba" aria-label="Buscar con Google" id="gbqfba" name="btnK"
Es fundamental, para emplearlo en nuestro código VBA para Excel, localizar de cada elemento, la característica Id (o Name):
Para el cuadro de búsqueda: id="gbqfq" y name="q";
Para el botón: id="gbqfba" y name="btnK"
Por desgracia existen multitud de formularios en las diferentes web que no emplean HTML, o no tienen definidos estos parámetros Id o Name... pero merece la pena intentarlo.
Por supuesto los valores a incorporar, lo podemos extraer de nuestras celdas, por ejemplo en la línea:
IE.Document.getelementbyid("gbqfq").Value = "excelforo"
por
IE.Document.getelementbyid("gbqfq").Value = Range("A1").Value
Hola buenas. Ya tengo funcional el codigo de cargar pagina, rellenar el formulario y clickear en buscar, ahora estoy intentado asignar parte del texto del resultado a una variable de vba. Intento hacer whois desde excel, y que de cada ip te de el pais.
ResponderEliminarComo puedo asignar el texto de la pagina a una variable?
(estoy practicando con esta pagina de whois y con ips de prueba)
http://whois.urih.com/record/80.5.4.8/
Y lo suyo seria obtener el pais del campo 4 o 22.
Saludos y gracias por la pagina.
Hola,
Eliminarno he probado nunca.. pero en teoría, si ya tienes identificado el id, definir una variable con el dato sería tan sencillo como:
NombreVariable=IE.Document.getelementbyid("gbqfq").Value
o el Id que tengas...
Espero te funcione.
Saludos
Buenas y gracias de antemano por la info facilitada, me ha servido de ayuda.
ResponderEliminarPero me surge una duda.
Yo accedo a mi formulario inicial (www.mipagina.com/default.aspx) relleno los input y presiono el botón, como indicas. Esto funciona perfectamente y me carga la página siguiente (también en www.mipagina.com/default.aspx) con nuevos input y button. Cuando quiero hacer click del botón de la segunda página, no encuentra el elemento.
Alguna sugerencia para "refrescar" los elementos del IE.Document con los de la segunda página?
Un saludo.
Hola,
Eliminaren teoría el bucle
Do
DoEvents
Loop Until IE.readystate = 4
sirve para parar y continuar (refrescar) lo que vemos.
Prueba colocando un nuevo bucle después de la primera página
Espero te pueda ayudar.
Slds
hola!!! muchas gracias por publicar este tema, creo que es muy potente su aplicación, lamentablemente no he logrado hacer que abra el Internet Explorer, sabes si debe modificarse alguna configuración para que la macro lo pueda abrir?
ResponderEliminargracias!!!
Hola Luis,
Eliminarte has asegurado de instalar la referencia que se comenta en el post??
'Fundamental para el correcto funcionamiento es instalar la referencia Microsoft Internet Controls, desde el menú Herramientas > Referencias del editor de VBA'
Saludos
Hola amigo saludos. Gracias desde ya por tu ayuda.
ResponderEliminarYo necesito Refrescar una Lista desplegable cuyos valores dependen de otra lista. Es decir, que el control internamente cargue los valores o indices.
Hola Jimmy,
Eliminarquizá esta entrada te de la pista.
http://excelforo.blogspot.com.es/2009/10/ejemplo-de-doble-validacion.html
Saludos
Este comentario ha sido eliminado por el autor.
ResponderEliminarEn 1er lugar agradecerle por su respuesta muy rápida, en 2do lugar disculparme por no detallar bien mi problema.
ResponderEliminarMi pregunta es con respecto a Rellenar un Formulario Web aspx desde Excel VBA.
He logrado poner los valores en 3 ComboBox, pero hay un 4to Combo q depende de lo q elija en este 3er Combo, he usado el código de tu Blog y es lo siguiente, pero nada queda en blanco:
Abrir_IE.document.getElementById("ctl00_ContentPlaceMain_ddlSeccion").Click
Abrir_IE.document.getElementById("ctl00_ContentPlaceMain_ddlSeccion").Value = Range("e12")
El código fuente HTML queda así:
<-- Seleccionar -->
Luego del click q yo hago manualmente queda así:
<-- Seleccionar -->
A
B
C
D
E
Necesito simular un click en ese objeto para q cargue o refresque los valores en el objeto para recién asignarle el Value.
Ahora si detalle bien mi problema. Gracias por compartir sus conocimientos, estaré pendiente de su respuesta.
Hola Jimmy,
Eliminaren principio no conozco otra forma que con esa propiedad .click
podría ser más un tema del formulario Web que un problema del código... por desgracia no siempre es posible atacar formularios webs desde Excel, ya que los webmaster tienen herramientas para evitar entradas desde robots u otros accesos automatizados.
Siento no poder darte una respuesta clara.
Un cordial saludo y suerte
P.D.: si lo logras, por favor, compártelo aquí!
Este comentario ha sido eliminado por el autor.
ResponderEliminarMe gustaria compartir el codigo, tal vez en algo estoy fallando, y alguien pueda compartir la solución:
ResponderEliminarSub RellenarNotas()
Dim Abrir_IE As Object
Set Abrir_IE = CreateObject("internetexplorer.Application")
With Abrir_IE
.Top = 1
.Left = 1
.Width = 600
.Height = 400
.Visible = True
.navigate ("http://sistemas10.minedu.gob.pe/siagie3/ExamenPorSeccion.aspx?sPms=Up11f8wTMi7VbctOh4deCw%3d%3d")
Do While Abrir_IE.busy
DoEvents
Loop
Application.Wait (Now + TimeValue("0:00:03"))
End With
Abrir_IE.document.getElementById("ctl00_ContentPlaceMain_ddlPeriodo").Value = Range("d8")
Abrir_IE.document.getElementById("ctl00_ContentPlaceMain_ddlGrado").Value = Range("e11")
Do While Abrir_IE.busy
DoEvents
Loop
Abrir_IE.document.getElementById("ctl00_ContentPlaceMain_ddlGrado").Click
Application.Wait (Now + TimeValue("0:00:03"))
Abrir_IE.document.getElementById("ctl00_ContentPlaceMain_ddlSeccion").Value = "01"
'Tambien esta linea de codigo me deja en blanco la lista desplegable:
'Abrir_IE.document.getElementById("ctl00_ContentPlaceMain_ddlSeccion").javascript = "javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceMain$ddlSeccion\',\'\')', 0)"
End Sub
Ahora mi pregunta seria si es que es posible ejecutar codido javascrip desde VBA Excel, tal vez ahi está la solución. GRACIAS
Hola,
Eliminarsi es posible... aunque nunca lo he usado leí algo al respecto hace bastante tiempo, se trata del método de windows execscript,
por ejemplo:
IE.Document.parentWindow.execScript "ctl00_ContentPlaceMain_ddlSeccion;"
no controlo mucho de java... pero quizá te de la pista.
Slds
Ok, Gracias lo probaré...
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola Ismael, aqui otra vez 1ro para compartir la solución y 2do para hacerte una nueva consulta:
ResponderEliminar1. SOLUCIÓN usando el Método windows execscript:
Sub RellenarNotas()
Dim Abrir_IE As Object
Set Abrir_IE = CreateObject("internetexplorer.Application")
With Abrir_IE
.Top = 1
.Left = 1
.Width = 600
.Height = 400
.Visible = True
.Navigate ("http://sistemas10.minedu.gob.pe/siagie3/ExamenPorSeccion.aspx?sPms=Up11f8wTMi7VbctOh4deCw%3d%3d")
Do While Abrir_IE.Busy: DoEvents: Loop
Application.Wait (Now + TimeValue("0:00:03"))
End With
Abrir_IE.Document.getElementById("ctl00_ContentPlaceMain_ddlPeriodo").Value = Range("d8")
Abrir_IE.Document.getElementById("ctl00_ContentPlaceMain_ddlGrado").Value = Range("e11")
Abrir_IE.Document.parentWindow.execScript "javascript: setTimeout('__doPostBack(\'ctl00$ContentPlaceMain$ddlSeccion\',\'\')', 0)", "JavaScript"
Application.Wait (Now + TimeValue("0:00:01"))
Abrir_IE.Document.getElementById("ctl00_ContentPlaceMain_ddlSeccion").Value = Range("e12")
Abrir_IE.Document.parentWindow.execScript "javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceMain$ddlArea\',\'\')', 0)", "JavaScript"
Application.Wait (Now + TimeValue("0:00:01"))
Abrir_IE.Document.getElementById("ctl00_ContentPlaceMain_ddlArea").Value = Range("i8")
' A partir de aquí mi pregunta
Abrir_IE.Document.getElementById("ctl00_ContentPlaceMain_btnRegistroResumen").disabled = False
Abrir_IE.Document.getElementsByName("ctl00$ContentPlaceMain$btnRegistroResumen").Item.Click
End Sub
2. Cuando hago Click en el "Boton REGISTRO" se abre otra ventana de IE y es en donde pondre las notas de estudiantes, y al cual ya no puedo controlar; ¿Cómo haría para tener control de esa nueva ventana, o tal vez Cómo a partir de ese click crear un nuevo objeto IE y de ahi si podria controlar todos sus elementos?
-He intentado creando otro objeto IE a partir del Link que genera el Boton REGISTRO, pero se abren 2 ventanas iguales.
Tal vez necesite crear una Funcion o almacenar ese objeto o ese Click en una Variable, estas 2 cosas lo desconozco.
Desde ya GRACIAS por tu ayuda.
AYUDA POR FAVOR...
ResponderEliminarCuando hago Click en el "Boton REGISTRO" se abre otra ventana de IE y es en donde pondre las notas de estudiantes, y al cual ya no puedo controlar; ¿Cómo haría para tener control de esa nueva ventana, o tal vez Cómo a partir de ese click crear un nuevo objeto IE y de ahi si podria controlar todos sus elementos?
-He intentado creando otro objeto IE a partir del Link que genera el Boton REGISTRO, pero se abren 2 ventanas iguales.
Tal vez necesite crear una Funcion o almacenar ese objeto o ese Click en una Variable, estas 2 cosas lo desconozco.
Desde ya GRACIAS por tu ayuda.
Hola,
Eliminarlo siento... no sabría darte una respuesta.
Slds
Ok Gracias amigo Ismael...
EliminarA ver si te valiera ésto:
EliminarEn el código:
Dim ie2 as internetExplorer
...
Set ie2 = Nothing
(instrucciones para que ie1 abra la ventana emergente)
Set ie2 = GetIE("url de la ventana nueva")
Función GetIE
Function GetIE(sLocation As String) As Object
'Devuelve el InternetExplorer que tiene por url sLocation
Dim objShell As Object, o As Object
Dim sURL As String
Dim RetVal As Object
Set RetVal = Nothing
Set objShell = CreateObject("Shell.Application")
For Each o In objShell.Windows
sURL = ""
On Error Resume Next
sURL = o.locationURL
On Error GoTo 0
'Debug.Print sURL
If sURL Like sLocation & "*" Then
Set RetVal = o
Exit For
End If
Next o
Set GetIE = RetVal
End Function
Este comentario ha sido eliminado por el autor.
ResponderEliminarhola buenas tardes, me parece muy interesante y admirable lo que haces al ayudarnos y darnos excelentes inicio s para experimentos, sabes? tengo una duda que me detiene en un proyectito y espero que puedas ayudarme, en tu basta experiencia crees que pueda importar datos de una pagina web que ya esta cargada en un navegador externo a excel? digase firefox o chrome o ie? es que ya intente hacerlo de forma directa pero no puedo al momento de hacerlo por codigo me es casi imposible ya que debo de introducir varios datos de los cuales obtengo varios resultados y de alli debo elegir el que busco y entonces la pagina arroja una tabla, la cual es la que necesito cargar a excel una vez que he cargado las variables anteriores, crees que eso sea posible???? muchas gracias
ResponderEliminarHola Erick,
Eliminaren principio si es posible, ya que cada vez que navegamos en una Web interaccionamos y son acciones que se pueden representar y replicar desde las macros de Excel...
Ahora bien, la realidad es que todo es más complejo que la teoría, y no siempre es posible replicar los movimientos que plasmamos :(
El asunto se complica aún un poco más si en lugar de IE lo queremos hacer sobre Chrome, FireFox, etc...
Un saludo y suerte!!
Hola a todos, necesito algo similar a esto pero que funcione en el navegador TOR, sera posible?
ResponderEliminarHola,
Eliminarno conozco ese navegador.. pero supongo existirá su librería y podrás instalarla en Excel para poder trabajar con él...
??
Slds
hola,
ResponderEliminartengo una duda, he intentado hacer exactamente lo que comentais pero me encuentro que el boton de entrar no tiene ni nombre ni id, podriais decirme cual seria la instrucción?
pego el codigo del boton:
input type="submit" value="Entrar">
codigo vba:
Sub RellenarWEBGoogle()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.application")
IE.Navigate "https://www.sumasa.net/SOL/"
Do
DoEvents
Loop Until IE.readystate = 4
IE.Document.all("j_username").Value = "1111"
IE.Document.all(j_password").value = "1212"
IE.Document.getelementbytype("submit").Click
IE.Visible = True
End Sub
Hola Marc,
Eliminarlo normal en url de control de acceso, cuando están bien diseñados, es que eviten accesos de robots, o desde otras aplicaciones.. como es el caso, por lo que se vuelve muy complicado poder rellenarlos desde fuera...
Saludos
Hola Marc resolvistes a la final?? segun ya mi experiencia desde q vi este ejemplo de excelforo mas toda la info q me han dado debes ubicar la funciona Javascript q lo ejecuta q segun vi tu ejemplo es algo asi "javascript:self.on" ese es el q t va permitir acceder claro esta no digo q sea exactamente este pero debes con calma buscarlo cual es el q ejecuta ese click en el entrar
Eliminara mi me pasa lo mismo
EliminarHola Ismael, excelente artículo, muchas gracias por compartirlo y por ayudarnos :)
ResponderEliminarEstoy tratando de completar un formulario pero no puedo acceder a el desde VBA.
Te comento, para acceder al formulario debo pasar el mouse sobre el menú y darle clic a uno de los sub-sub-menús, el menú principal si tiene ID pero los sub-menus no.
Te comparto parte del código de la página para ver si me puedes ayudar en algo.
De nuevo, gracias por el aporte.
Saludos :D
table style="top: 0px;" border="0" cellspacing="0" cellpadding="0"
Eliminartbody
tr id="ctl00_ucMenuTools_mainMenun30" onmouseover="Menu_HoverDynamic(this)" onmouseout="Menu_Unhover(this)" onkeyup="Menu_Key(event)"
td
table width="100%" class="navigate ctl00_ucMenuTools_mainMenu_6" border="0" cellspacing="0" cellpadding="0"
tbody
tr
td style="width: 100%; white-space: nowrap;"
a class="ctl00_ucMenuTools_mainMenu_1 navigate ctl00_ucMenuTools_mainMenu_5"
style="font-size: 1em;" href="../Audit/Procedure/,DanaInfo=.abndpwDtwHwo35ysOs54,SSL+listProcedure.aspx?Type=E">Resultados de Auditoría
/a
/td
/tr
/tbody
/table
/td
/tr
/tbody
/table
Hola,
Eliminarlo normal es localizar el campo por Id o por Name...
a veces es inaccesible (leer otros comentarios arriba).
O también es posible estén dentro de otra parte del código, empleando otros scripts.. o incluso otros lenguajes (java, por ejemplo)...
Lo siento pero no puedo ayudarte; un saludo y suerte!
no puedo hacer que la macro pegue usuario y contraseña en una pagina de dhl ya tengo el id y nombre, lo he intentado de varias formas y no funciona
ResponderEliminarpagina.getElementsByName("j_username").innerText = usuario
pagina.getElementById("j_password").innerText = contrasena
ya intente poniendo Document en lugar de pagina
Hola Cristina,
Eliminarla propiedad debería ser mejor .Value (en lugar de .InnerText)
En todo caso, lee los comentarios anteriores... verás que se indica que en ciertas páginas, por protección de sus webmaster, se impide el acceso exterior.
Saludos
Buen dia
ResponderEliminaralguien sabe como darle click a un boton de tipo "input type="button" value="Siguiente" onclick="goToReceptor()" class="btn"
goToReceptor este se encuentra en un JS que dice
function goToReceptor() {
$("#__next").val("GeneracionCfdi/1");
$("#__valida").val("false");
changeActionForm("/Cfdi/NextGeneracionCfdi");
}
Gracias
Hola! Quisiera saber cómo hago para modificar el siguiente valor: "value":"" a "value":"128" y a la vez "text":"" a "text":"Charrua____220"
ResponderEliminarsiendo que ambos están incluidos en el Value de el siguiente elemento
input id="ctl00_MainContent_ddlBarraVirtual_ClientState" name="ctl00_MainContent_ddlBarraVirtual_ClientState" type="hidden" autocomplete="off" value="{"logEntries":[],"value":"","text":"","enabled":true,"checkedIndices":[],"checkedItemsTextOverflows":false}"
Saludos
Hola,
Eliminarfíjate en el ejemplo del post, al final se comenta:
Por supuesto los valores a incorporar, lo podemos extraer de nuestras celdas, por ejemplo en la línea:
IE.Document.getelementbyid("gbqfq").Value = "excelforo"
por
IE.Document.getelementbyid("gbqfq").Value = Range("A1").Value
Saludos
Ismael necesito de tu colaboración,
ResponderEliminarNecesito saber como puedo dar clicks consecutivos ya que estoy desarrollando una macro la cual cuando me abre una pagina espere unos segundos y de click sobre un nuevo elemento, agradecería tu ayuda enormemente.
Hola,
Eliminarpara hacer Click solo debes identificar el elemento (en ocasiones no es posible) y añadir a tu código tantas líneas como necesites, similares a esta:
IE.Document.getelementbyid("gbqfba").Click
'otra forma de llamarlo..
IE.Document.All("btnK").Click
Saludos
Hola Ismael.
ResponderEliminarTengo que meter cientos de fichas que tengo en Excel en una base de datos creada con Google doc. Otros años me ha servido el código perfectamente, pero este año en el nuevo documento que han creado cuando busco en el explorador DOM el ID de los campos no aparecen por ningún sitio.
En su lugar aparece la etiqueta "<Input name=...." y "getelementbyid" me da error 424 "Se requiere un objeto". A ver si me puedes ayudar. Gracias.
Hola Joaquín,
Eliminarsi en el html no hay nada identificado con el tipo ID, podrías probar con:
.getElementsByClassName("...")
o quizá
.getElementsByTagName("...")
Trataré de subir una explicación al blog al respecto
Saludos
Hola, como podría hacer si quiero llenar el formulario de una página web que ya sé encuentra abierta?
ResponderEliminarHola Juan Alberto,
Eliminarsubiré al blog una entrada exponiendo la solución..
Saludos
Gracias, estaré atento. Éxitos.
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola Buenas tardes, gracias por compartir sus conocimientos.
ResponderEliminarTengo una macro para hacer una consulta en una pagina web, pero el resultado de la consulta no aparece al dar - click derecho, "Ver código fuente"- Pero si uso la opción de "Inspeccionar Elemento", ahí si puedo ver el código del resultado de la consulta. El problema es que al correr la macro me envía un error que dice "Se requiere un objeto".
Hola,
Eliminarquizá hayas olvidado definir el objeto?? (revisa el código del ejemplo.. y fíjate en la fila 3 y en la declaración del objeto referido al control en el formulario web)
Saludos
Hola muchas gracias por contestar; este es el código. Ojalá tengas oportunidad de revisarlo.
EliminarPublic url As String, captcha As String
Sub valida_cfdi()
Dim ie As Object
Application.ScreenUpdating = False
'Creamos el objeto internet explorer
Set ie = CreateObject("InternetExplorer.Application")
'abrimos la web
ie.Navigate "https://verificacfdi.facturaelectronica.sat.gob.mx/"
'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"))
'Estos son valores de prueba que después se obtendrán leyendo los xml
ie.Document.getElementById("ctl00_MainContent_TxtUUID").Value = "EC609EC1-5F63-4333-A2B8-2EDC10B68075"
ie.Document.getElementById("ctl00_MainContent_TxtRfcEmisor").Value = "BEN9501023I0"
ie.Document.getElementById("ctl00_MainContent_TxtRfcReceptor").Value = "SARM8209281F1" '
'url del captcha
url = ie.Document.getElementsByTagName("img")(3).src
'Muestro la imagen del captcha en un Form y capturtamos el valor
UserForm1.Show
'enviamos el valor del captcha a la página
ie.Document.getElementById("ctl00_MainContent_TxtCaptchaNumbers").Value = captcha
'Click en el botón para enviar el formulario
ie.Document.getElementById("ctl00_MainContent_BtnBusqueda").Click
'_______________________NO FUNCIONA___________________________________________________________________
'leer el resultado de la validacion *****aún no funciona****
'marca el error 424 en tiempo de ejecución. "se requiere un objeto"
'Range("A2").Value = ie.Document.getElementById("ctl00_MainContent_LblRfcEmisor").textContent
'Range("B2").Value = ie.Document.getElementById("ctl00_MainContent_LblRfcReceptor").textContent
'Range("C2").Value = ie.Document.getElementById("ctl00_MainContent_LblUuid").textContent
'Range("D2").Value = ie.Document.getElementById("ctl00_MainContent_LblFechaCertificacion").textContent
'Range("E2").Value = ie.Document.getElementById("ctl00_MainContent_LblMonto").textContent
'Range("F2").Value = ie.Document.getElementById("ctl00_MainContent_LblEstado").textContent
'------------------------------------------------------------------------------------------------------
url = ""
captcha = ""
'hacemos visible la web, para verificar los datos enviados
ie.Visible = True
'ie.Quit
Set ie = Nothing
Application.ScreenUpdating = True
End Sub
Holaaaaa!!!! Mil gracias por compartir sus conocimientos, estuve leyendo y releyendo todos los mensajes de este post y caí en cuenta en que la opción que usó Jimmy Palacios Urbanome podía servir. ¡¡y me sirvió!!! Gracias a Dios que hay gente como ustedes dispuestos a compartir sus conocimientos. Ya lo pude solucionar. Saludos
ResponderEliminarPerfecto!
Eliminargracias!
Que tal Ismael, tengo el problema de no encontrar en el codigo de la pagina el boton para darle click, ya puedo abrir la pagina y poner el usuario y contraseña pero no logro hacer que haga el click en entrar, este es mi codigo :
ResponderEliminarOption Explicit
Sub FillInternetForm()
'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")
IE.Visible = True
IE.Navigate "https://www.cfdi.com.mx/login/"
' este es el tiempo que esperamos a que cargue la pagina
Application.Wait (Now + TimeValue("00:00:03"))
IE.Document.All("UserName").Value = ThisWorkbook.Sheets("Hoja1").Range("d2")
IE.Document.All("PasswordRegistro").Value = ThisWorkbook.Sheets("Hoja1").Range("d3")
Application.Wait Now + TimeValue("00:00:02") 'IE.Document.getElementById("validateLoginDetails(3);").Click
IE.Document.getelementbyid("bgpopup").Click
End Sub
me imagino que esta es la parte del codigo que hace referencia al boton pero ya lo he intentado y nada:
Validando información...
ya que al dar entrar empieza a Validar la informacion, me podrias ayudar? Saludos!!!
Hola!
Eliminarrevisa los comentarios anteriores... es un problema frecuente y ya se ha comentado alguna posible solución
Gracias!
Slds
Hola e probado tu codigo y si me abre la pagina pero al momento de llegar a esta linea:
ResponderEliminarLoop Until IE.readystate = 4
me sale un error:
Run-time error ´-2147417848(80010108)´:
Automation error
The object invoked has disconnected from its clients.
no se si me haga falta alguna otra referencia?
Hola,
Eliminarparece más bien un control desde la página web
:(
Saludos
Si fue una control del IE ya pude correr la cacro sin ningun problema muchas gracias. Ahora tengo otra duda. Mi pagina en la que quiero acceder tiene una casilla la cual tengo que seleccionar de una lista desplegable cual es el nivel de acceso que tengo. Como puedo seleccionar la opcion que corresponde, abajo pongo el codigo de la pagina:
EliminarAdministrador
Nivel 1
Nivel 2
Nivel 3
Hola, si fue una configuracion de la pagina web, ya pude correr la macro sin problemas.solo una pregunta mas, en mi pagina tengo una casilla donde tengo que sellecionar el nivel de mi usuario, como puedo seleccionar en nivel 3. en el codigo de mi pagina es el siguinete:
Eliminarelect name="tipo" tabindex="3">
ption value="">
ption value="admin">Administrador
ption value="n1">Nivel 1
ption value="n2">Nivel 2
ption value="n3">Nivel 3
elect>
nput type="submit" value="Entrar" tabindex="4">
Omiti las letras para poder subir el codigo
Hola,
Eliminarpuedes emplear un indicador de posición:
IE.getElementsByTagName("tipo").selectedindex=3
o simplemente
IE.getElementsByTagName("tipo").Value="Nivel 3"
debería funcionar..
Saludos
Hola,
EliminarUse las dos formas que me mencionaste pero siempre me arroja el error:
El objeto no admite esta propiedad o este método (error 438)
Ya intente poniendole "Document" despues de IE. pero me sigue apareciendo el mismo error no se a que se deba
¿¿?? no sabría decirte...
EliminarEstos códigos no siempre funcionan, según qué páginas web
:'(
Ok Gracias de todas formas por toda la ayuda le seguire intentando.
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarCuales seria los comandos para rellenar el formulario no solo con IE sino con por ejemplo con Chrome
ResponderEliminarHola Jorge,
Eliminar¿qué tal estás?, un placer saludarte igualmente
Al salir del entorno de MS necesitarás librerías/referencias de ese navegador para poder emplearlo en tu programción
Saludos cordiales
Nuevamente una consulta... logro llenar todo el formulario en la web desde excel, pero cuado doy buscar en el Formulario WEB la busqueda se realiza pero no termina, queda colgado.
ResponderEliminarPero, cuando cargo desde fuera el Formulario en la web sin que pase por excel, la busqueda se realiza correctamente.
Que esta mal?
Hola Jorge,
Eliminar¿qué tal estás?, un placer saludarte igualmente
a veces las web tienen 'cortafuegos' para evitar ataques desde fuera
Saludos
Que se hace en estos casos??
EliminarPoco se puede hacer, no es algo que depende de Excel...
Eliminarlos cortafuegos están para eso.. para evitar accesos no deseados
Saludos
Hola Jorge
ResponderEliminarEnvio saludos cordiales.
Fijate que al momento de llegar a la linea:
IE.Document.getelementbyid("gbqfq").Value = "excelforo"
Aparece el mensaje ERROR DE AUTOMATIZACION.
Ya revise las librerias y tengo activas:
Microsoft HTML Object Library
Microsoft Internet Controls
¿A que se debe este problema?
Este comentario ha sido eliminado por el autor.
ResponderEliminaren una página que necesito consultar me sale "HTTP 405 Método no permitido"... y no puedo acceder a dicha dirección
ResponderEliminar¿Conoces la solución? Muchas gracias
Hola Damian,
Eliminarqué tal estás? un placer saludarte
Este es un error de la web, no del procedimiento... solo el propietario de esa web puede corregir el fallo
Saludos cordiales
Hola Ismael,
ResponderEliminarTengo una consulta, he realizado todos los pasos que me has indicado, y me ido de maravilla; sin embargo, en el último paso tengo que darle click a un botón para que me abra un pop up y en este ingresar datos nuevamente. ¿Cómo podría hacer esto?
El código que me aparece es el siguiente:
Reporte Infocorp Business
Gracias de antemano,
Hola
Eliminarpara estos temas de entradas y navegación más elaborada, y especializada, te recomiendo leas algo de José Santos.. tiene varios videostutotiales en youtube sobre el tema
Saludos
Hola...
ResponderEliminarUna consulta, estuve investigando para pasar los cortafuegos..
Me dicen que debo ingresar los campos alfanuméricos de excel como Campo Código de imagen.
Sera que tiene un ejemplo de como hacer esto?
Hola Jorge,
Eliminarlo siento, pero no tengo ejemplo al respecto...
Tampoco había escuchado nada similar
:(
Saludos
Hola Ismael,
ResponderEliminarCuando configuro la macro me sale en explorer como puedo hacer para que me corra en Chrome?Gracias
Hola,
Eliminarpodrías usar:
chromePath = """C:\Program Files\Google\Chrome\Application\chrome.exe"""
Shell (chromePath & " -url http:google.es")
Espero te oriente
Saludos
Hola, donde encuentro los controladores para Google Chrome? Desde vba excel, a veces ie falla mucho al abrir una página
ResponderEliminarHola José,
Eliminares difícil de decir, es algo que cambia tan a menudo que es fácil quedarse obsoleto con este tema :'(
saludos
hola he podido ejecutar mi macros con ie
ResponderEliminarpero tengo un inconveniente con un desplegable
select class="form-control" name="RUT_EMP">
optgroup label="Seleccione una opción">
option value="76">UNITECH 76
option value="99">RALLY 99
optgroup
select>
div>
entonces puedo seleccionar uno con el siguiente codigo
HTMLdoc.getElementsByName("RUT_EMP")(0).selectedIndex = 1
HTMLdoc.getElementsByName("RUT_EMP")(0).FireEvent ("onchange")
ó
HTMLdoc.getElementsByName("RUT_EMP")(0).selectedIndex = 0
HTMLdoc.getElementsByName("RUT_EMP")(0).FireEvent ("onchange")
mi consulta es como verificar si estoy eligiendo 99 ó 76?
tuve que quitar < y </
ResponderEliminarquiero saber todos los valores que este name("RUT_EMP") puede tener para luego asignarle el selectedindex correspondiente
ResponderEliminarasí lo solucione
ResponderEliminarDim ya As String
ya = 0
ads:
If HTMLdoc.getElementsByName("RUT_EMP")(0).options(ya).value = "99" Then
HTMLdoc.getElementsByName("RUT_EMP")(0).selectedIndex = ya
Else
ya = ya + 1
GoTo ads
End If
HTMLdoc.getElementsByName("RUT_EMP")(0).FireEvent ("onchange")
Application.Wait (Now + TimeValue("00:00:01"))
HTMLdoc.getElementsByClassName("btn btn-default btn-sm")(0).Click
Gracias por compartir tu solución!!
EliminarAsí crecemos todos
;-)
UN cordial saludo