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.