Como interagir com sites usando VBA e Internet Explorer - Parte II

Nessa segunda parte, escrevo sobre como clicar em botões e preencher caixas de textos.

Como interagir com sites usando VBA e Internet Explorer - Parte II
Este post foi originalmente publicado em  http://officevbavsto.blogspot.com/2011/02/vba-internet-acessando-sites-da-web_19.html.

Nessa segunda parte, escrevo sobre como clicar em botões e preencher caixas de textos.

Apenas revisando o código do nosso artigo anterior:

Sub AcessaPagina()
  Dim ie As InternetExplorer
  Set ie = New InternetExplorer 
  ie.Navigate "http://www.google.com.br"
  ie.Visible = True
End Sub

Este código apenas abre a página do Google.

Caixas de textos


Primeiro, você precisa descobrir o nome da caixa de texto (propriedade name da tag HTML). Em seguida, digite o seguinte código:

Sub AcessaPagina()
  Dim ie As InternetExplorer
  Set ie = New InternetExplorer 
  ie.Navigate "http://www.google.com.br" 
  ie.Document.All.Item("q").innertext = "Pesquisa"
  ie.Visible = True
End Sub
  • q é o nome da caixa de texto do site do Google onde você digita a sua pesquisa.
  • Document: é nome do objeto que representa o documento HTML em uma janela específica [2] - em nosso caso, o Microsoft Internet Explorer. O objeto Document fornece acesso a todos os Elementos HTML em uma página [1].
  • All: é a propriedade através da qual você acessa todos os elementos do documento HTML, tais como links, tabelas, imagens, botões, formulários e etc. Em termos técnicos, ele retorna uma coleção de elementos contidos em um objeto [3].
  • Item: é um método onde acesso determinado objeto de várias coleções incluindo a coleção All [4] (Ex. Links, Forms e etc.). Você pode especificar tanto o nome do objeto quanto o índice dele dentro da coleção (Ex.: ie.Document.All.Item(2).innertext = "Pesquisa"). O índice é um índice baseado em zero [4], ou seja, o primeiro item da coleção é o Item(0).
  • innerText: é uma propriedade através da qual você atribui ou retorna o texto entre a tag HTML de abertura e de fechamento [5].
Dica: Para descobrir o nome destes objetos, suas propriedades e valores basta utilizar a Janela de Variáveis Locais do Visual Basic Editor. No VBE, clique em Exibir -> Janela Variáveis Locais.

Outra maneira de preencher uma caixa de texto:

Sub AcessaPagina()

  Dim ie As InternetExplorer
  Set ie = New InternetExplorer
  ie.Navigate "http://www.google.com.br"
  ie.Document.getElementsByName("q").Item.InnerText = "Pesquisa"
  ie.Visible = True

End Sub
  • getElementsByName: é um método pelo qual você acessa o objeto através do nome especificado [6].

E se o objeto que eu quero atribuir valor possui a propriedade id e eu quero referenciar por esta?

Use o método getElementById():

Sub AcessaPagina()
  Dim ie As InternetExplorer
  Set ie = New InternetExplorer
  ie.Navigate "http://www.google.com.br"
  ie.Document.getElementById("id").Value = "Valor"
  ie.Visible = True
End Sub

O método getElementById() acessa o primeiro elemento pelo “id” especificado [7].

Botões

Use o método Click.

Sub AcessaPagina()
  Dim ie As InternetExplorer
  Set ie = New InternetExplorer
  ie.Navigate "http://www.google.com.br"
  ie.Document.getElementsByName("q").Item.InnerText = "Pesquisa"
  
  ie.Document.all.Item("btnK").Click
  
  ie.Visible = True
End Sub

O método click faz com que o evento onclick seja disparado. Normalmente, o evento onclick é disparado quando o usuário clica com o botão esquerdo do mouse sobre o objeto [8]. O objecto pode ser um botão, link, ou até uma tag <div>

Nota: Você pode usar também o método getElementById ao invés do método getElementsByName.

Se você tentou executar de uma só vez todo o código e obteve um erro. É possível que seja porque o código tentou preencher a caixa de texto “Pesquisa” do site do Google antes do site ser carregado.

Como resolver?

Inclua um loop para aguardar o carregamento total da página.

Sub AcessaPagina()

  Dim ie As InternetExplorer
  Set ie = New InternetExplorer
  ie.Navigate "http://www.google.com.br"
  
  While ie.Busy
  
  Wend
  
  ie.Document.getElementsByName("q").Item.InnerText = "Pesquisa"
  ie.Document.getElementsByName("btnK").Item.Click
  ie.Visible = True
  
End Sub
  • Busy: é uma propriedade que retorna um valor Booleano (true ou false) que indica se o objeto (nesse caso o Internet Explorer) está ocupado em uma operação de navegação (carregando uma página) ou Download [9].

Créditos

Photo by Florian Olivo on Unsplash

Referências Bibliográficas

comments powered by Disqus

Read more