Acessando o Internet Explorer via VBA
Autor: Lucas | Publicado: 2013-07-17T09:39:00-03:00


É possível interagir com o Internet Explorer (IE) utilizando VBA. O código abaixo, como exemplo, pesquisa no Google o termo “dicasspss.blosgpot.com” e mostra em uma caixa de mensagem o primeiro resultado obtido.


No VBA criamos uma instância do IE e temos acesso aos elementos HTML da página exibida. Com isso podemos, por exemplo, preencher automaticamente formulários,  e ter acesso, de forma automatizada, a textos e propriedades de TAGs HTML.


Naturalmente para acessar com sucesso uma página precisamos conhecer sua estrutura HTML. Como diversas páginas são criadas automaticamente ou possuem uma grande quantidade de scripts (como a do Google, por exemplo), podemos utilizar as ferramentas de inspeção dos navegadores para aprender mais sobre a página. A figura abaixo mostra o modo de inspeção do Mozzila Firefox analisando o campo de busca do Google. Podemos ver que esse campo tem a propriedade ‘name’ igual ‘q’ e é essa informação que utilizaremos em nosso código VBA para interagir com esse elemento.






Segue abaixo o código.



Public Sub ExemploBuscaGoogle()
On Error Resume Next
    
    Dim i As Long
    
    Dim IE As Object
    Dim objElement As Object
    Dim objCollection As Object
        
    
    ' Cria instância do IE
    Set IE = CreateObject("InternetExplorer.Application")
    
    ' Define o endereço a ser carregado
    IE.navigate ("www.google.com.br")
    
    ' Define se a janela do IE será ou não exibida
    IE.Visible = True
    
    ' Espera carregar. A espera aqui está definida para 1 segundo,
    ' mas pode ser ajustada dependendo da necessidade.
    Do While IE.Busy
        Application.Wait DateAdd("s", 1, Now)
    Loop


    ' Busca campos tipo input, uma vez que queremos acessar o campo de busca.
    ' Sabemos que o campo é tipo input porque analisamos o código HTML da página do Google.
    ' O método getElementByTagName retorna todas as TAGs HTML da página carregada com o nome desejado.
    Set objCollection = IE.document.getElementsByTagName("input")
     
    
    ' Varre os inputs do HTML procurando pelos elementos desejados
    ' Queremos encontrar o elemento input com name = "q"
    ' Uso o while aqui mas poderia usar o 'for each'
    i = 0
    While i &lt; objCollection.Length
        
        ' "q" é o nome do campo de busca, como visto no código HTML
        If objCollection(i).Name = "q" Then
            
            ' Preenche o campo de busca com o que queremos
            objCollection(i).Value = "dicasspss.blogspot.com"
        
        End If
        
        i = i + 1
        
    Wend
    
    ' Após preenchermos o campo de pesquisa mandamos um 'enter' para o sistema.
    ' No método SendKeys o 'enter' é representado pelo símbolo ~
    Application.SendKeys ("~")
    

    ' Esperamos novamente o IE carregar a página.
    ' Note que o codigo aqui realiza uma espera de 1 segundo
    ' mesmo sem verificar se o IE está ocupado.
    ' Isso é uma boa estratégia pois diversos sites passam por
    ' mais de uma janela após submeter informações
    ' a um formulário. Então a espera tenta garantir que a janela
    ' final esteja carregada.
    Application.Wait DateAdd("s", 1, Now)
    Do While IE.Busy
        Application.Wait DateAdd("s", 1, Now)
    Loop
    
    
    ' Agora temos que buscar o primeiro link do primeiro resultado.
    ' Novamente temos que analisar o HTML, agora da página de resultados.
    
    
    ' Buscamos as tags 'li' onde class = 'g' da página, pois é onde estão os resultados.
    ' Novamente, sabemos pela análise do HTML.
    Set objCollection2 = IE.document.getElementsByTagName("li")
    
    
    ' Dentre as tags 'li' buscamos a primeira com classe 'g'
    For Each elemento In objCollection2
        
        ' "q" é o nome do campo de busca, como visto no código HTML
        If elemento.classname = "g" Then
        
            ' Mostra a msgbox com o texto do primeiro resultado
            MsgBox elemento.innertext
            
            Exit For
        
        End If
    
    Next
    
    ' Fecha a instância do IE
    IE.Quit

End Sub




Botões de formulário (objetos tipo input) podem ser acessador utilizando o método Click. O botão de pesquisa do Google não responde a esse método, então a estratégia foi enviar para o sistema um 'enter'.



Abraços,Lucas Rodrigues