Update: 22-10-15. Tengo un post mas reciente y me parece que con una mejor explicación, se los recomiendo!
Para este ejemplo vamos a usar excel para entrar a una pagina Web, la de DHL, ingresar nuestro usuario y contraseña, hacer una consulta de facturacion sobre un rango de fechas, y al final extraer los datos de la consulta y pegarlos en el reporte de excel.
Key 1: Se necesita instalar las librerias Microsoft HTML objects Library y Microsoft Internet Controls. Estas librerias nos permiten usar los objetos metodos y propiedades que usamos en Javascript.
Key 2: Se debe crear un objeto Internet Explorer y un objeto HTMLDocument
Key 3: Se debe buscar los <tags> de los botones y formularios en las paginas web.
Key 4: GetElementById accede a esos objetos y parentWindow.execScript ejecuta las acciones detro de esos objects.
Sub parser() Dim pagina As HTMLDocument Dim explorador As InternetExplorer Dim direccion As String direccion = "https://dhl.e-custodia.com.ec/indexdhl.php" usuario = "nombreDeUsuario" contrasena = "tuContrasena"'Con esto se crea una nueva ventana en el explorador, que es el primer paso
Set explorador= New InternetExplorer'Aqui definimos si queremos ver todo lo que pasa en el exploardor o no, por ahora Sí, asi que TRUE
explorador.Visible = True'Navega a la direccion deseada
explorador.Navigate direccion
'Aqui la macro espera hasta que el explorador cargue la pagina completamente.
Do DoEvents Loop Until explorador.ReadyState = READYSTATE_COMPLETE'con la pagina cargada, asignamos el contenido al objeto pagina
Set pagina= explorador.Document
'Asi mismo busco el de la contrasena, el cual es "pass".
'Tambien se debe buscar cual es la funcion que se activa cuando hacemos click en el boton de enviar. En este caso es un nombre super largo que viene despues de
onclick=
, solo lo copio todo.'Ahora si, usando el metodo getElementById, y execScript:
pagina.getElementById("user").innerText = usuario pagina.getElementById("pass").innerText = contrasena pagina.parentWindow.execScript ("if(document.getElementById('user').value!='' && document.getElementById('pass').value!=''){document.getElementById('form1').submit()}")'Luego de esto la ventana del explorador irá a otra pagina, lo que hay que hacer es esperar a que el explorador cargue. Por alguna razon explorador.ReadyState no funciona bien en este paso, pero la siguiente solucion es excelente:
Do While explorador.Busy Loop'Se queda pensando hasta que la pagina en el explorador cargue completamente. Se puede repetir el proceso cada vez que tengamos que pasar a otras paginas mientras exploramos.
End Sub
Cada pagina web es diferente, si la macro no funciona como esperabas, enviame un mail y si no es muy complicado el asunto quizas pueda darte una ayuda extra.
Hola Buenas. El problema que quiero solucionar es el siguiente. Nosotros rellenamos un formulario (reserva) en excel que luego me gustaría poner en el calendario. Que hasta ahora lo que hacíamos es copiar y pegar a mano. Se podría hacer una macro que nos copiara ese texto automáticamente en el día correspondiente de google calendar? no nos importaría abonar algo por los servicios. Gracias!
ResponderEliminarPues yo creo que sí es posible. Enviarme un mail a eljayan@gmail.com con una descripción más detallada del problema. Saludos!
EliminarHola Buenos días. El inconveniente que tengo es el siguiente, ingreso a una pagina con clave y contraseña esta no la puedo abrir desde macro porque la contraseña cambia cada minuto, entonces necesito desde macro tener acceso a ella una vez ya esta abierta. De antemano Gracias.
ResponderEliminarHOLA, QUISIERA SABER SI ME PODRIAS AYUDAR, QUISIERA SIMPLEMENTE PODER ABRIR LA SIGUIENTE PAGINA EN EXCEL, PERO NO SE COMO HACERLE. http://www.facemama.com/gestograma-facemama/gestograma.html SALUDOS....
ResponderEliminarHola, gracias por la info me parece buen trabajo.. sera posible que me hagas llegar el archivo de excel ya incluido el codigo por favor.
ResponderEliminarslds, Carlos
Saludos, es posible hacer algo similar pero con Chrome y no con IE...?
ResponderEliminarSi es posible con cualquier navegador saludos
EliminarHola a todos,
ResponderEliminarIntento realizar una consulta directa desde excel utilizando el siguiente codigo
Sub Website()
Dim IE As Object, Doc As Object, UserName As Object, Password As Object, strCode As String
Set IE = CreateObject("internetexplorer.application")
IE.Visible = True
' IE.navigate "http://fieldwork.genesisenergy.co.nz/"
IE.navigate "http://dgii.gov.do/servicios/consultas/Paginas/ConsultaNCF.aspx"
Do While IE.readystate <> 4: DoEvents: Loop
Set Doc = CreateObject("htmlfile")
Set Doc = IE.document
Set UserName = Doc.getelementbyid("txtRNC")
UserName.Value = "131102139"
Set Password = Doc.getelementbyid("txtNCF")
Password.Value = "A010010010100000001"
Set btnLogin = Doc.getelementbyid("btnConsultar")
btnLogin.Click
End Sub
pero al ejecutarlo me indica el siguiente mensanje
Se ha producido el error 424 en tiempo de ejecucion se requiere un objeto
Ayuda!!
Hola, quisiera saber si es posible abrir un listado de paginas en X rando de Columna (1 pag por celda) con google chrome.
ResponderEliminarGracias.
Hola, hasta donde conozco solo funciona con Internet Explorer amigo. Con chrome no creo que sea posible
EliminarRuben:
ResponderEliminarTengo el siguiente problema: estoy intentando ingresar a una intranet de mi empresa, para buscar ciertas cosas. Sin embargo, cuando ejecuto el código, me lanza el error 91, problema con bloque With (o algo así)
Este es mi código:
Sub navegar()
'las declaraciones son opcionales, pero ayudan a visualizar las opciones mientras se digita
Dim ie As InternetExplorer
Dim pagina As HTMLDocument
Dim buscar As HTMLButtonElement
Dim precios As Object
Dim precio As Object
Dim cate As String
'On Error Resume Next
'cual es la cantidad de items a mostrar
cate = CStr(Range("B1").Value)
'crea el explorador de internet
Set ie = New InternetExplorer
'hacemos visible el explorador
ie.Visible = True
'navega a la página de aribnb
ie.navigate "https://c.na43.visual.force.com/apex/ShippingAdminCategories"
'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 de una ciudad
Set cat = pagina.getElementsByClassName("ch-points-ltrt")(0)
cat.Value = ThisWorkbook.Sheets("Hoja1").Range("B1").Value ' Aquí lanza el error
'pagina.getElementsByClassName("nav-search-btn")(0).Click
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
End Sub
* El codigo donde quiero insertar dicha búsqueda es este:
* tuve que borrar las "n" de i*put, pues no me dejaba postearlo con dicho concepto (fue raro eso)
¿Cómo puedo solucionarlo?
Que es cat? Una lista desplegable?
EliminarNo, sólo es el nombre que le quise dar.
EliminarEn realidad es una celda que contiene lo que quiero pegar en la página
Entonces es al revés, intenta con
EliminarThisWorkbook.Sheets("Hoja1").Range("B1").Value = cat.innerText
Me lanza el mismo error:
Eliminar"Se ha producido el error 91 en tiempo de ejecución: Variable de objeto o bloque With no establecido"
¿Qué puede ser? ¿Se puede solucionar?
EliminarEs difícil sin ver el html de la página pero según el error que aparece ñ, el problema es en la línea
EliminarSet cat = pagina.getElementsByClassName("ch-points-ltrt")(0)
Quizás "ch-points-ltrt" no es un ClassName sino un id? Puedes copiarme el código html de esa parte?
Este es el codigo donde quiero ingresar el dato contenido en B1. No me deja ingresar la palabra IPUT (CON N), por ello las reemplazé por nada
EliminarEste es el codigo donde quiero ingresar el dato contenido en B1. No me deja ingresar la palabra IPUT (CON N), por ello las reemplazé con vacío
Eliminar' iput name="search-category-iput" class="ch-points-ltrt" id="search-category-iput" required="" type="text" size="20" placeholder="Ingresa el ID de la categoría" '
Eliminar¿Alguna posible solución?
EliminarBuenos días Ruben.
ResponderEliminarNecesito hacer algo similar.
Te he mandado un correo a eljayan@gmail.com
Si te parece puedo explicarte lo que necesito y si hay que pagar se paga.
Gracias.
Saludos.