Automatizar Internet Explorer (IE) con VBA

Esta página contiene ejemplos de codificación para automatizar Internet Explorer (IE) usando VBA.

** Actualización 7/6/2019: Actualmente, la mejor manera de lograr la automatización web con VBA es utilizando Selenium. Este artículo NO cubre el selenio. Los ejemplos siguientes funcionarán y podrían ser suficientes para sus necesidades. Sin embargo, si tiene necesidades más avanzadas o desea convertirse en un experto en automatización web, le recomiendo encarecidamente utilizar Selenium en su lugar. El curso de Dan Strong sobre Automatización Web (descuento disponible a través de este enlace) es un recurso fantástico para aprender Selenium:

(Recibo una Comisión de afiliados del curso de Dan)

Navegar a una página web con VBA

El primer fragmento de código abre IE y navega a un sitio web. El segundo fragmento de código abre IE, navega a un sitio web e interactúa con un cuadro de entrada.

12345678910111213141516171819202122232425262728293031323334353637 Sub Automate_IE_Load_Page ()'Esto cargará una página web en IEDim i tan largoAtenuar URL como cadenaAtenuar IE como objetoDim objElement como objetoDim objCollection como objeto'Crear objeto InternetExplorerEstablecer IE = CreateObject ("InternetExplorer.Application")'Establezca IE.Visible = True para que IE sea visible, o False para que IE se ejecute en segundo planoIE.Visible = Verdadero'Definir URLURL = "https://www.automateexcel.com/excel/"'Navegar a URLIE.Navigate URL'La barra de estado le permite al usuario saber que el sitio web se está cargandoApplication.StatusBar = URL & "se está cargando. Espere…"'Espere mientras se carga IE …' IE ReadyState = 4 significa que la página web se ha cargado (el primer ciclo está configurado para evitar saltar inadvertidamente el segundo ciclo)Hacer mientras IE.ReadyState = 4: DoEvents: Bucle 'Hacer mientrasHacer hasta IE.ReadyState = 4: DoEvents: Bucle 'Hacer hasta'Página web cargadaApplication.StatusBar = URL y "cargado"'Descargar IEEstablecer IE = NadaEstablecer objElement = NothingEstablecer objCollection = NothingEnd Sub

Un problema muy común que la gente encuentra cuando trabaja con IE en VBA es que VBA intente ejecutar código antes de que Internet Explorer se haya cargado por completo. Al usar este código, le dice a VBA que repita un ciclo hasta que IE esté listo (IE.ReadyState - 4).

1234 'Espere mientras se carga IE …' IE ReadyState = 4 significa que la página web se ha cargado (el primer ciclo está configurado para evitar saltar inadvertidamente el segundo ciclo)Hacer mientras IE.ReadyState = 4: DoEvents: Bucle 'Hacer mientrasHacer hasta IE.ReadyState = 4: DoEvents: Bucle 'Hacer hasta

Además, tenga en cuenta esta línea de código:

1 IE.Visible = TRUE

Este código alterna si IE se ejecuta en segundo plano o en primer plano.

Abrir URL e ingresar datos en formulario usando VBA

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 'Esto debe ir en la parte superior de su módulo. Se usa para configurar IE como la ventana activaFunción de declaración pública SetForegroundWindow Lib "user32" (ByVal HWND As Long) As LongSub Automate_IE_Enter_Data ()'Esto cargará una página web en IEDim i tan largoAtenuar URL como cadenaAtenuar IE como objetoDim objElement como objetoDim objCollection como objetoDim HWNDSrc tan largo'Crear objeto InternetExplorerEstablecer IE = CreateObject ("InternetExplorer.Application")'Establezca IE.Visible = True para hacer que IE sea visible, o False para que IE se ejecute en segundo planoIE.Visible = Verdadero'Definir URLURL = "https://www.automateexcel.com/vba"'Navegar a URLIE.Navigate URL'La barra de estado le permite al usuario saber que el sitio web se está cargandoApplication.StatusBar = URL & "se está cargando. Espere…"'Espere mientras se carga IE …' IE ReadyState = 4 significa que la página web se ha cargado (el primer ciclo está configurado para evitar saltar inadvertidamente el segundo ciclo)Hacer mientras IE.ReadyState = 4: DoEvents: LoopHacer hasta IE.ReadyState = 4: DoEvents: Loop'Página web cargadaApplication.StatusBar = URL y "cargado"'Obtener ID de ventana para IE para que podamos configurarlo como activar ventanaHWNDSrc = IE.HWND'Establecer IE como ventana activaSetForegroundWindow HWNDSrc'Buscar y completar cuadro de entradan = 0Para cada itm en IE.document.allSi itm = "[object HTMLInputElement]" Entoncesn = n + 1Si n = 3 Entoncesitm.Value = "hoja de cálculo"itm.Focus 'Activa el cuadro de entrada (hace que aparezca el cursor)Application.SendKeys "{w}", True 'Simula una pulsación de tecla' W '. True le dice a VBA que espere'hasta que la pulsación de tecla haya terminado antes de continuar, permitiendo'javascript en la página para ejecutar y filtrar la tablaIr al finalmacroTerminara siTerminara sipróximo'Descargar IEendmacro:Establecer IE = NadaEstablecer objElement = NothingEstablecer objCollection = NothingEnd Sub

GetElement en IE usando VBA

La interacción con objetos en Internet Explorer a menudo puede ser una molestia. Necesita identificar con qué objeto específico trabajar. En el código anterior, buscamos la tercera instancia de “[object HTMLInputElement]” (un formulario de entrada). Luego ingresamos "orksheet" en el formulario de entrada (itm.value = "orksheet"), movemos el cursor al formulario de entrada (itm.focus) y escribimos "w". En este caso, es necesario escribir "w" para activar el javascript utilizado para filtrar la tabla.

Hay métodos más directos para seleccionar objetos, sin embargo, este método debería funcionar si todo lo demás falla.

Para usar esos otros métodos, querrá usar las siguientes opciones:

1234 IE.document.getelementbyid ("ID"). Value = "value" 'Buscar por IDIE.document.getelementsbytagname ("ID"). Value = "value" 'Buscar por etiquetaIE.document.getelementsbyclassname ("ID"). Value = "value" 'Buscar por claseIE.document.getelementsbyname ("ID"). Value = "value" 'Buscar por nombre

Puede tener problemas al utilizar estos métodos si hay más de un elemento con el mismo nombre. Al usar un bucle (como en el código de muestra anterior), puede especificar qué instancia del elemento usar.

Interactuar con IE usando VBA

En el código anterior usamos el evento: Atención (itm.focus) para activar el cursor en el formulario.

Puede encontrar más ejemplos de eventos, métodos y propiedades de objetos / elementos aquí: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

No todos estos funcionarán con todos los objetos / elementos y puede haber bastante prueba y error al interactuar con objetos en IE.

Enviar claves a Internet Explorer

Usamos el comando Sendkeys en el código anterior:

1 Application.SendKeys "{w}", verdadero

Las Sendkeys generalmente deben ser un último recurso. Por lo general, debería poder interactuar con los objetos directamente, sin embargo, a veces es más fácil usar el comando Sendkeys. Sendkeys es esencialmente lo mismo que escribir con el teclado. Debe asegurarse de que se seleccionen las ventanas y los objetos correctos antes de continuar. Sendkeys también puede activar eventos que se ejecutan en función de la interacción del usuario en la web. En el ejemplo anterior, usamos Sendkeys para activar el filtro Javascript en la Tabla que usamos en la página web.

Sendkeys tiene dos entradas:
1. la clave para ingresar (generalmente rodeada por {}… {enter}, {q}….)
2. Espere hasta que Sendkeys se haya completado antes de continuar con VERDADERO / FALSO. Por lo general, querrá que este ajuste sea TRUE cuando trabaje con Internet Explorer.

Ejecute Internet Explorer en segundo plano

Para ejecutar Internet Explorer en segundo plano, debe hacer dos cosas:

1. Llame a la macro que contiene el código IE con Application.Run para que la macro se ejecute en segundo plano mientras continúa trabajando:

1 Application.Run ("Automate_IE_Load_Page")

Nota: Este código podría interrumpir potencialmente su trabajo o su trabajo podría interferir con el código. Por ejemplo, si usa SendKeys, Sendkeys puede enviar una pulsación de tecla a la aplicación incorrecta. Sé muy cuidadoso con esto.
2. Ocultar IE:

1 IE.Visible = Falso

Selenio y VBA

Si este artículo le resultó útil, le recomendamos que consulte el curso de Dan Strong sobre automatización web. Cubre cómo usar Selenium con VBA.

(Recibo una Comisión de afiliados del curso de Dan)

Testimonio de uno de los estudiantes de Dan

https://excelvbaisfun.com/wp-content/uploads/2019/06/dan_strong_complete_web_automation_course_review_VbFn2vwul8A_1080p.mp4

Va a ayudar al desarrollo del sitio, compartir la página con sus amigos

wave wave wave wave wave