Como interagir com sites usando VBA e Internet Explorer - Parte V
Neste artigo, eu concluo a série como interagir com sites usando VBA e Internet Explorer. Hoje, escrevo sobre execução de scripts JavaScript, rotina de tratamento para carregamento de página e outras dicas.

Este post foi originalmente publicado em http://officevbavsto.blogspot.com/2011/03/vba-internet-acessando-sites-da-web_12.html
Neste artigo, eu concluo a série como interagir com sites usando VBA e Internet Explorer. Hoje, escrevo sobre execução de scripts JavaScript, rotina de tratamento para carregamento de página e outras dicas.
Executando Scripts JavaScript
Sub AcessaPagina()
Dim ie As InternetExplorer
Set ie = New InternetExplorer
ie.Navigate "http://www.google.com.br"
ie.Visible = True
ie.Document.parentwindow.execscript ("alert('Hellow World')")
End Sub
- A propriedade
parentWindow
obtêm uma referência ao objeto container da janela [1]. Podemos dizer que a propriedadeparentWindow
retorna uma referência à janela (objetoWindow
) que contém o objetoDocument
[3]. Essa propriedade é suportada apenas no Internet Explorer [2]. - Obtemos a propriedade
parentWindow
para podermos invocar o método responsável pela execução de Scripts -execScript
[6]. - O método
execScript
executa o script [4].
Este método pode ser útil se você quer usar um script escrito em outra linguagem de script além de JavaScript [5]. Este método suporta linguagens de script tais como JavaScript, JScript, VBS e VBScript [5].
Abaixo, segue um exemplo de uso deste método com VBScript:
ie.Document.parentwindow.execScript "msgbox("""")", "VBScript"
Linguagens de script diferentes de JavaScript devem ser especificadas no segunda parâmetro do método execScript
, como no exemplo acima.
Por que executar javascript? Suponha que você tem um site onde exista uma validação de dados. Você pode submeter os dados do formulário diretamente, ao invés de clicar no botão "Gravar". Assim você consegue "furar" a validação de dados existente no site, por exemplo.
ie.Document.parentwindow.execScript ("metodo_gravar()")
No código abaixo, desabilitamos a caixa de texto de pesquisa na página do Google, e mudamos o texto do botão “Pesquisar” para “É nois”.
Sub AcessaPagina()
Dim ie As InternetExplorer
Set ie = New InternetExplorer
ie.Navigate "http://www.google.com.br"
ie.Visible = True
'Disabilita a caixa de texto de pesquisa
ie.Document.parentwindow.execScript ("document.forms[0].q.disabled=true")
'Muda o texto do botão de "Pesquisa Google"
ie.Document.parentwindow.execScript _
("document.getElementById('gbqfsa').innerText='É nois'")
End Sub
Nota: Todos esses comandos de mudar as características da página tem efeito apenas no seu navegador. Eles não afetam o servidor da página. Se você atualizar a página (F5) verá que as mudanças feitas através do método execScript
desaparecerão.
Carregamento de páginas
Abaixo alguns códigos para tratar o carregamento de página:
Código 1:
Sub AcessaPagina()
Dim ie As InternetExplorer
Set ie = New InternetExplorer
ie.Navigate "http://www.google.com.br"
ie.Visible = True
Do While ie.Busy
Loop
End Sub
Busy
: é uma propriedade que retorna um valor Booleano (True ou False) que indica se o objeto (no nosso caso o Internet Explorer) está ocupado em uma operação de navegação (carregando uma página) ou Download [7].
Código 2:
Sub AcessaPagina()
Dim ie As InternetExplorer
Set ie = New InternetExplorer
ie.Navigate "http://www.google.com.br"
ie.Visible = True
Do Until ie.Document.readyState = "complete"
Loop
End Sub
- A propriedade
readyState
retorna o status do documento (objeto Document) atual [8].
Os possíveis valores de retorno da propriedade readyState
são [9]:
- “uninitialized”: O documento não foi inicializado ainda;
- “loading”: O documento está carregando;
- “loaded”: O documento terminou de carregar;
- “interactive”: O usuário pode interagir com o documento mesmo que não esteja totalmente carregado;
- “complete”: O documento está totalmente carregado.
Código 3:
Sub AcessaPagina()
Dim ie As InternetExplorer
Set ie = New InternetExplorer
ie.Navigate "http://www.google.com.br"
ie.Visible = True
Do Until ie.readyState = READYSTATE_COMPLETE
Loop
End Sub
Semelhante ao Código 2, mas aqui estamos usando valores enumerados do enumerador “tagREADYSTATE”.
Qual a diferença entre ie.Busy
e ie.document.readyState
?
Em alguns momentos o objeto InternetExplorer sinalizará que o Navegador não está mais ocupado (ie.Busy retorna False), mas pode acontecer de uma parte do documento ou de um frame não estar totalmente carregado. Para estes casos, o melhor é utilizar o Código 2 e 3 mencionados acima.
Mudando a Barra de Status
Sub AcessaPagina()
Dim ie As InternetExplorer
Set ie = New InternetExplorer
ie.Navigate "http://www.google.com.br"
ie.Visible = True
ie.StatusBar = "Mudei a barra de status!"
End Sub
A propriedade StatusBar retorna o objeto StatusBar [11].
Fechando o navegador
Sub AcessaPagina()
Dim ie As InternetExplorer
Set ie = New InternetExplorer
ie.Navigate "http://www.google.com.br"
ie.Visible = True
ie.Quit
Set ie = Nothing
End Sub
O método Quit
fecha o objeto [12] (no exemplo em questão, o objeto é o navegador do Internet Explorer).
Créditos
Photo by Markus Spiske from Pexels
Referência Bibliográfica
- parentWindow property (Internet Explorer): http://msdn.microsoft.com/pt-br/library/ie/ms534331(v=vs.85).aspx, acessado em 10.03.2013;
- parentWindow property (document): http://help.dottoro.com/ljemhvhd.php, acessado em 10.03.2013;
- Zakas, Nicholas C. Professional JavaScript for Web Developers, 2nd Edition. Indianapolis, IN (USA). Wilei Publishing Inc, 2009;
- execScript method (Internet Explorer): http://msdn.microsoft.com/en-us/library/ie/ms536420(v=vs.85).aspx, acessado em 10.03.2013;
- execScript method (window): http://help.dottoro.com/ljoswolk.php, acessado em 10.03.2013;
- window object (Internet Explorer): http://msdn.microsoft.com/pt-br/library/ie/ms535873(v=vs.85).aspx, acessado em 10.03.2013;
- Busy property: http://msdn.microsoft.com/en-us/library/aa752050(v=vs.85).aspx, acessado em 09.03.2013;
- Document readyState Property: http://www.w3schools.com/jsref/prop_doc_readystate.asp, acessado em 10.03.2013;
- readyState property (Internet Explorer): http://msdn.microsoft.com/pt-br/library/ie/ms534359(v=vs.85).aspx, acessado em 10.03.2013;
- tagREADYSTATE values: http://msdn.microsoft.com/en-us/library/aa750671.aspx, acessado em 10.03.2013;
- window.statusbar: https://developer.mozilla.org/en-US/docs/DOM/window.statusbar, acessado em 10.03.2013;
- Quit Method: http://msdn.microsoft.com/pt-br/library/aa752097(v=vs.85).aspx, acessado em 10.03.2013.