Automatize o Internet Explorer (IE) usando VBA

Esta página contém exemplos de codificação para automatizar o Internet Explorer (IE) usando o VBA.

** Atualização 07/06/2019: Atualmente, a melhor maneira de obter automação da web com VBA é usando Selenium. Este artigo NÃO cobre o selênio. Os exemplos abaixo funcionarão e podem ser suficientes para suas necessidades. No entanto, se você tiver necessidades mais avançadas ou quiser se tornar um especialista em automação da web, recomendo fortemente o uso do Selenium. O curso de Dan Strong sobre Automação da Web (desconto disponível através deste link) é um recurso fantástico para aprender Selenium:

(Eu recebo uma Comissão de Afiliados do curso de Dan)

Navegue para uma página da Web com VBA

A primeira parte do código abre o IE e navega para um site. A segunda parte do código abre o IE, navega para um site e interage com uma caixa de entrada.

12345678910111213141516171819202122232425262728293031323334353637 Sub Automate_IE_Load_Page ()'Isso irá carregar uma página da web no IEDim i enquantoDim URL As StringDim IE como objetoDim objElement As ObjectDim objCollection As Object'Criar objeto InternetExplorerDefina IE = CreateObject ("InternetExplorer.Application")'Defina IE.Visible = True para tornar o IE visível ou False para que o IE seja executado em segundo planoIE.Visible = True'Definir URLURL = "https://www.automateexcel.com/excel/"'Navegar para URLIE.Navigate URL'Barra de status informa ao usuário que o site está carregandoApplication.StatusBar = URL & "está carregando. Aguarde…"'Aguarde enquanto o IE carregando…' IE ReadyState = 4 significa que a página da web foi carregada (o primeiro loop é definido para evitar pular inadvertidamente o segundo loop)Do While IE.ReadyState = 4: DoEvents: Loop 'Do WhileDo Até IE.ReadyState = 4: DoEvents: Loop 'Do Até'Página carregadaApplication.StatusBar = URL e "Carregado"'Descarregar o IEDefinir IE = NadaDefinir objElement = NothingDefinir objCollection = NothingEnd Sub

Um problema muito comum que as pessoas encontram ao trabalhar com o IE no VBA é o VBA tentar executar o código antes que o Internet Explorer seja totalmente carregado. Usando este código, você diz ao VBA para repetir um loop até que o IE esteja pronto (IE.ReadyState - 4).

1234 'Aguarde enquanto o IE carregando…' IE ReadyState = 4 significa que a página da web foi carregada (o primeiro loop é definido para evitar pular inadvertidamente o segundo loop)Do While IE.ReadyState = 4: DoEvents: Loop 'Do WhileDo Até IE.ReadyState = 4: DoEvents: Loop 'Do Até

Além disso, observe esta linha de código:

1 IE.Visible = TRUE

Este código alterna se o IE é executado em segundo ou primeiro plano.

Abra o URL e insira os dados no formulário usando o VBA

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 'Isso deve ir no topo do seu módulo. É usado para definir o IE como a janela ativaFunção de declaração pública SetForegroundWindow Lib "user32" (ByVal HWND As Long) As LongSub Automate_IE_Enter_Data ()'Isso irá carregar uma página da web no IEDim i enquantoDim URL As StringDim IE As ObjectDim objElement As ObjectDim objCollection As ObjectDim HWNDSrc enquanto'Criar objeto InternetExplorerDefina IE = CreateObject ("InternetExplorer.Application")'Defina IE.Visible = True para tornar o IE visível ou False para que o IE seja executado em segundo planoIE.Visible = True'Definir URLURL = "https://www.automateexcel.com/vba"'Navegar para URLIE.Navigate URL'Statusbar informa ao usuário que o site está carregandoApplication.StatusBar = URL & "está carregando. Aguarde…"'Aguarde enquanto o IE carregando…' IE ReadyState = 4 significa que a página da web foi carregada (o primeiro loop é definido para evitar pular inadvertidamente o segundo loop)Do While IE.ReadyState = 4: DoEvents: LoopDo Até IE.ReadyState = 4: DoEvents: Loop'Página carregadaApplication.StatusBar = URL e "Carregado"'Obtenha o ID da janela para o IE para que possamos defini-lo como janela ativaHWNDSrc = IE.HWND'Definir IE como janela ativaSetForegroundWindow HWNDSrc'Encontrar e preencher a caixa de entradan = 0Para cada item em IE.document.allSe itm = "[object HTMLInputElement]" Entãon = n + 1Se n = 3 entãoitm.Value = "orksheet"itm.Focus 'Ativa a caixa de entrada (faz o cursor aparecer)Application.SendKeys "{w}", True 'Simula um pressionamento de tecla' W '. True diz ao VBA para esperar'até que o pressionamento de tecla termine antes de prosseguir, permitindo'javascript na página para executar e filtrar a tabelaGoTo endmacroFim seFim sePróximo'Descarregar o IEendmacro:Definir IE = NadaDefinir objElement = NothingDefinir objCollection = NothingEnd Sub

GetElement no IE usando VBA

Freqüentemente, interagir com objetos no Internet Explorer pode ser uma dor. Você precisa identificar com qual objeto específico trabalhar. No código acima, estamos procurando a 3ª instância de “[objeto HTMLInputElement]” (um formulário de entrada). Em seguida, inserimos “orksheet” no formulário de entrada (itm.value = “orksheet”), movemos o cursor para o formulário de entrada (itm.focus) e digitamos “w”. Digitar “w” é necessário neste caso para ativar o javascript usado para filtrar a tabela.

Existem métodos mais diretos para selecionar objetos, no entanto, esse método deve funcionar se todo o resto falhar.

Para usar esses outros métodos, você vai querer usar as seguintes opções:

1234 IE.document.getelementbyid ("ID"). Value = "value" 'Encontrar por IDIE.document.getelementsbytagname ("ID"). Value = "value" 'Encontrar por tagIE.document.getelementsbyclassname ("ID"). Value = "value" 'Encontrar por classeIE.document.getelementsbyname ("ID"). Value = "value" 'Encontrar por nome

Você pode ter problemas ao usar esses métodos se houver mais de um elemento com o mesmo nome. Usando um loop (como no código de exemplo acima), você pode especificar qual instância do elemento usar.

Interaja com o IE usando VBA

No código acima, usamos o evento: Foco (itm.focus) para ativar o cursor no formulário.

Você pode encontrar mais exemplos de eventos de objeto / elemento, métodos e propriedades aqui: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

Nem todos eles funcionarão com todos os objetos / elementos e pode haver um pouco de tentativa e erro ao interagir com objetos no IE.

Sendkeys para o Internet Explorer

Usamos o comando Sendkeys no código acima:

1 Application.SendKeys "{w}", verdadeiro

Sendkeys geralmente deve ser o último recurso. Normalmente, você deve ser capaz de interagir com objetos diretamente, no entanto, às vezes é mais fácil usar apenas o comando Sendkeys. Sendkeys é essencialmente o mesmo que digitar com o teclado. Você precisa se certificar de que as janelas e objetos corretos estão sendo selecionados antes de continuar. Sendkeys também pode disparar eventos que são executados com base na interação do usuário na web. No exemplo acima, usamos Sendkeys para ativar o filtro Javascript na Tabela que usamos na página da web.

Sendkeys tem duas entradas:
1. a tecla para entrar (geralmente cercada por {}… {enter}, {q}….)
2. Aguarde até que Sendkeys seja concluído antes de prosseguir TRUE / FALSE. Geralmente, você deseja que seja definido como TRUE ao trabalhar com o Internet Explorer.

Execute o Internet Explorer em segundo plano

Para executar o Internet Explorer em segundo plano, você precisa fazer duas coisas:

1. Chame a macro que contém o código do IE com Application.Run para que a macro seja executada em segundo plano enquanto você continua trabalhando:

1 Application.Run ("Automate_IE_Load_Page")

Nota: Este código pode interromper seu trabalho, ou seu trabalho pode interferir no código. Por exemplo, se você usar SendKeys, Sendkeys pode enviar um pressionamento de tecla para o aplicativo errado. Tenha muito cuidado com isso.
2. Ocultar IE:

1 IE.Visible = False

Selênio e VBA

Se você achou este artigo útil, verifique o curso de Dan Strong sobre Automação da Web. Ele aborda como usar o Selenium com VBA.

(Eu recebo uma Comissão de Afiliados do curso de Dan)

Depoimento de um dos alunos de Dan

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