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.

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 objetoDocument
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çãoAll
[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 é oItem(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
- Document Object: http://www.w3schools.com/jsref/dom_obj_document.asp, acessado em 09.03.2013;
- Document Object (Internet Explorer): http://msdn.microsoft.com/en-us/library/ie/ms535862(v=vs.85).aspx, acessado em 09.03.2013;
- all property (Windows): http://msdn.microsoft.com/pt-br/library/ie/ms537434(v=vs.85).aspx, acessado em 09.03.2013;
- item method (Internet Explorer): http://msdn.microsoft.com/pt-br/library/ie/ms536460(v=vs.85).aspx, acessado em 09.03.2013;
- InnerText property: http://www.w3schools.com/aspnet/control_htmltablerow.asp?output=print, acessado em 09.03.2013;
- Document getElementsByName() Method: http://www.w3schools.com/jsref/met_doc_getelementsbyname.asp, acessado em 09.03.2013;
- Document getElementById() Method: http://www.w3schools.com/jsref/met_doc_getelementbyid.asp, acessado em 09.03.2013;
- click | onclick event (Internet Explorer): http://msdn.microsoft.com/en-us/library/ie/ms536913(v=vs.85).aspx, acessado em 09.03.2013;
- Busy property: http://msdn.microsoft.com/en-us/library/aa752050(v=vs.85).aspx, acessado em 09.03.2013;