Uma classe wrapper de automação em torno do objeto InternetExplorer que facilita o controle com VBScript.
CONFIGURAÇÃO | USO | IE-OBJETO | PROPRIEDADES | MÉTODOS | HISTÓRIA | CONTATO
Primeiro, vamos adicionar a classe ao nosso próprio arquivo VBScript.
With CreateObject( "Msxml2.XMLHttp.6.0" )
Call .open( "GET" , "https://raw.githubusercontent.com/simply-coded/easy-ie-automate/master/eiea.vbs" , False )
Call .send() : Call Execute(.responseText)
End With
'your code here...
Baixe o arquivo eiea.vbs
.
Você pode copiar e colar ou importar o código para o seu arquivo VBScript.
Class EasyIEAutomate
'paste the EasyIEAutomate class in place of this one.
End Class
'your code here...
Dim eieaPath : eieaPath = "c:pathtoeiea.vbs"
Execute(CreateObject( "Scripting.FileSystemObject" ).OpenTextFile(eieaPath, 1 ).ReadAll)
'your code here...
CONFIGURAÇÃO | USO | IE-OBJETO | PROPRIEDADES | MÉTODOS | HISTÓRIA | CONTATO
Agora que adicionamos a classe ao nosso arquivo VBScript, vamos criar uma instância dela.
Set eIE = New EasyIEAutomate
'your code here
Por padrão, isso não criará um processo do IE imediatamente. A razão para isso é que, se você tiver uma janela ou guia do IE aberta, poderá capturar esse processo em vez de criar um novo. Criar ou obter uma janela existente pode ser feito de algumas maneiras: Init() , ReBase() , RePoint() e Latest() .
Vejamos alguns exemplos:
' These all do the same thing.
'1.
Set eIE = ( New EasyIEAutomate)(vbUseDefault)
'2.
Set eIE = ( New EasyIEAutomate)(CreateObject( "InternetExplorer.Application" ))
'3.
Set eIE = New EasyIEAutomate
eIE(vbUseDefault)
'4.
Set eIE = New EasyIEAutomate
eIE(CreateObject( "InternetExplorer.Application" ))
'Already have the object
Set objIE = CreateObject( "InternetExplorer.Application" )
Set eIE = ( New EasyIEAutomate)(objIE)
'Already have the object
Set objIE = CreateObject( "InternetExplorer.Application" )
Set eIE = New EasyIEAutomate
eIE.ReBase objIE
O método ReBase() pode ser usado a qualquer momento para alterar qual processo do IE a classe está controlando e é apenas um alias para o método Init() .
Set eIE = New EasyIEAutomate
'URL of the IE window that is already open.
eIE.RePoint "https://www.google.com/?gws_rd=ssl"
Set eIE = New EasyIEAutomate
'Will get the most recent IE process created.
eIE.Latest
Se você começar sem nenhum processo do IE, o EasyIEAutomate criará um automaticamente quando você começar a usar a classe. Um (1) segundo pop-up de "Inicialização automática de um novo objeto IE". avisaremos você se isso acontecer.
Set eIE = ( New EasyIEAutomate)( Nothing )
' Or just: Set eIE = New EasyIEAutomate
' This and many other methods and properties will trigger an automatic creation of an IE process if none exist.
eIE.Show
CONFIGURAÇÃO | USO | IE-OBJETO | PROPRIEDADES | MÉTODOS | HISTÓRIA | CONTATO
Todas as propriedades e métodos do IE que você usa ainda podem ser acessados através da Propriedade Base .
Set IEA = ( New EasyIEAutomate)(vbUseDefault)
'Navigate to Google.
IEA.Base.Navigate "http://www.google.com/"
'Adjust the look of the window.
IEA.Base.AddressBar = False
IEA.Base.MenuBar = False
IEA.Base.StatusBar = False
IEA.Base.Height = 500
IEA.Base.Width = 800
'Wait for window to load
While IEA.Base.Busy : WScript.Sleep( 400 ) : Wend
'Center the window on screen.
Dim SCR : Set SCR = IEA.Base.Document.ParentWindow.screen
IEA.Base.Left = (SCR.width - IEA.Base.Width) / 2
IEA.Base.Top = (SCR.height - IEA.Base.Height) / 2
'Show the window
IEA.Base.Visible = True
'Change the title of the window
IEA.Base.Document.title = "Google Searcher"
Se tudo isso não lhe parece familiar, recomendo verificar todas as propriedades e métodos principais aqui.
CONFIGURAÇÃO | USO | IE-OBJETO | PROPRIEDADES | MÉTODOS | HISTÓRIA | CONTATO
Agora vamos entrar em algumas das novas propriedades adicionadas.
@retornar
[array] - Uma matriz de processos disponíveis do IE (janelas e guias).
' EXAMPLE 1:
Set eIE = New EasyIEAutomate
' Get number of tabs/windows opened.
count = UBound(eIE.Avail) + 1
' Collect their names & url and show them.
collect = ""
For Each ie In eIE.Avail
collect = collect & ie.LocationName & " - " & ie.LocationURL & vbLF
Next
MsgBox collect, vbOKOnly, "IE object(s) open = " & count
' EXAMPLE 2
Set google = New EasyIEAutomate
' Search for a tab/window using google
For Each ie In google.Avail
If InStr(ie.LocationURL, "google.com/" ) Then
google(ie)
Exit For
End If
Next
If google.Base Is Nothing Then
ans = MsgBox( "IE with google was not found. Create one?" , vbYesNo + vbQuestion)
If ans = vbYes Then
google(vbUseDefault) ' This creates a new IE process
google.Base.Navigate "https://www.google.com/"
Else
WScript.Quit
End If
End If
' Show the window if it was hidden or a new one was created.
google.Base.Visible = True
' Wait for it to load before trying to mess with it
While google.Base.Busy : WScript.Sleep 400 : Wend
' Search for something in google.
google.Base.Document.getElementById( "lst-ib" ).Value = "searching in google"
google.Base.Document.getElementById( "tsf" ).Submit
WScript.Sleep 2000
' This would be a better way to search, but these are just examples.
google.Base.Navigate "https://www.google.com/#q=alternative+search+in+google"
@retornar
[objeto] - O objeto principal do Internet Explorer. Veja objeto IE.
@retornar
[string] - A URL do processo atual do IE. O mesmo que eIE.Base.LocationURL . Alerta se não existir nenhum processo do IE.
@retornar
[string] - O título do processo atual do IE. O mesmo que eIE.Base.LocationName . Alerta se não existir nenhum processo do IE.
CONFIGURAÇÃO | USO | IE-OBJETO | PROPRIEDADES | MÉTODOS | HISTÓRIA | CONTATO
Fecha o processo atual do IE. O mesmo que eIE.Base.Quit . Alerta se não existir nenhum processo do IE.
Fecha todos os processos abertos do IE (ocultos ou visíveis).
Define a visibilidade do processo atual do IE como verdadeira. O mesmo que eIE.Base.Visible = True . Alerta se não existir nenhum processo do IE e, em seguida, cria um.
Define a visibilidade do processo atual do IE como falsa. O mesmo que eIE.Base.Visible = False . Alerta se não existir nenhum processo do IE e, em seguida, cria um.
Centraliza a janela na tela. Se nenhum site for carregado, um com "about:blank" será navegado. É necessário um site carregado para obter a resolução da tela.
Set eIE = ( New EasyIEAutomate)(vbUseDefault)
' Centering before the browser is visible makes for a nicer looking experience.
eIE.Center
eIE.Show
Navega no processo do IE para este local. O mesmo que eIE.Base.Navigate2 "URL_HERE" . Alerta se não existir nenhum processo do IE e, em seguida, cria um.
@params
url [string] - Um URL de endereço para navegar.
Cria uma nova guia e navega no processo do IE para este local. O mesmo que eIE.Base.Navigate2 "URL_HERE", 2048 . Alerta se não existir nenhum processo do IE e, em seguida, cria um.
@params
url [string] - Um URL de endereço para navegar.
Cria uma nova guia de plano de fundo e navega no processo do IE para este local. O mesmo que eIE.Base.Navigate2 "URL_HERE", 4096 . Alerta se não existir nenhum processo do IE e, em seguida, cria um.
@params
url [string] - Um URL de endereço para navegar.
Aguarda que o processo atual do IE termine de carregar. Alerta se não existir nenhum processo do IE.
O método espera que o elemento inserido termine de carregar. A página atual pode ser carregada, mas o conteúdo dentro dela, como um iframe, ainda pode precisar de tempo para carregar.
@params
elem [objeto] - Um objeto de elemento HTML como um iframe.
Set eIE = ( New EasyIEAutomate)(vbUseDefault)
eIE.Navigate "https://rawgit.com/simply-coded/easy-ie-automate/master/practice/index.html"
eIE.Show
' Wait for main webpage to load
eIE.WaitForLoad
' Get an iframe on that page.
Set myFrame = eIE.Base.Document.getElementById( "ice_frame" )
' Wait for iframe to load if it hasn't already.
eIE.DeepWaitForLoad(myFrame)
' To access things inside an iframe it must respect the same origin policy!
MsgBox myFrame.contentDocument.querySelector( "img" ).src, vbOKOnly, "The image source is:"
Porém, existe uma maneira mais fácil. O próximo exemplo faz a mesma coisa que este usando uma função chamada Deeper() .
O método aguarda o carregamento do elemento e então retorna o contentDocument do quadro. Alerta e sai do script se a mesma política de origem for violada. Usado para acessar/editar coisas dentro de um quadro.
@params
squery [string] – Uma string de consulta para obter o iframe.
@retornar
[object] - O contentDocument do elemento frame como um objeto.
Set eIE = ( New EasyIEAutomate)(vbUseDefault)
eIE.Navigate "https://rawgit.com/simply-coded/easy-ie-automate/master/practice/index.html"
eIE.Show
' Waits for main webpage to load, selects the element, waits for it to load,
' and then returns the element's contentDocument. Alerts and quits if same
' origin policy is violated.
Set myFrame = eIE.Deeper( "#ice_frame" )
MsgBox myFrame.querySelector( "img" ).src, vbOKOnly, "The image source is:"
Muda a Base para um objeto diferente do Internet Explorer. Alias para o método Init() padrão. Um exemplo pode ser encontrado na seção de uso.
@params
ou seja, [objeto] - O objeto de janela/guia do Internet Explorer para o qual você deseja alterar o objeto Base.
Muda a Base para um objeto diferente do Internet Explorer. Um exemplo pode ser encontrado na seção de uso.
@params
url [string] - Um URL de uma janela/guia do Internet Explorer que está aberta no momento e para a qual você deseja alterar o objeto Base.
Muda a Base para o objeto mais recente do Internet Explorer. Um exemplo pode ser encontrado na seção de uso.
Usa eIE.Base.Document.querySelector( squery ) para recuperar um elemento. Aqui está a documentação sobre Element.querySelector(). Aqui estão as várias maneiras de pesquisar elementos. Aguarda o carregamento do documento antes de pesquisar e alerta e sai se não for encontrado.
@params
squery [string] - A string de consulta para selecionar o elemento.
@retornar
[objeto] - O elemento encontrado como um objeto.
Set eIE = ( New EasyIEAutomate)(vbUseDefault)
eIE.Navigate "https://rawgit.com/simply-coded/easy-ie-automate/master/practice/index.html"
eIE.Show
' get various elements and interact with them
eIE.Query( ".titles" ).style.color = "deepskyblue"
eIE.Query( "input[name='email']" ).Value = "[email protected]"
eIE.Query( "#pass" ).Value = "bananas_are_the_universal_scale"
eIE.Query( "#milk" ).removeAttribute( "checked" )
eIE.Query( "input[type='radio'][value='female']" ).setAttribute( "checked" )
eIE.Query( "form > p > button" ).Click
Usa eIE.Base.Document.querySelectorAll( squery ) para recuperar um NodeList. Aqui estão as várias maneiras de pesquisar elementos. Aguarda o carregamento do documento antes de pesquisar e alerta e sai se algo não puder ser encontrado.
@params
squery [string] - A string de consulta para selecionar os elementos.
@retornar
[objeto] - Os elementos encontrados como um objeto NodeList.
Set eIE = ( New EasyIEAutomate)(vbUseDefault)
eIE.Navigate "https://rawgit.com/simply-coded/easy-ie-automate/master/practice/index.html"
eIE.Show
' get elements with class="titles" and all <p> tag elements
Set list = eIE.QueryAll( ".titles, p" )
' change their style up a bit
For i = 0 To list.length - 1
list.item(i).style.backgroundColor = "white"
list.item(i).style.border = "2px solid deepskyblue"
list.item(i).style.fontFamily = "Consolas, monospace"
Next
CONFIGURAÇÃO | USO | IE-OBJETO | PROPRIEDADES | MÉTODOS | HISTÓRIA | CONTATO
ADD
- Documentação adicionada ao README.md .CHANGE
- Métodos renomeados da seguinte forma: NavigateT() para NavigateTab() e NavigateBT() para NavigateBgTab() .CHANGE
- ReBase() agora um alias para o método Default Init() .ADD
- Pop-ups cronometrados para erros que não valem a pena desistir. Consulte a documentação para saber quais métodos alertam.CHANGE
- Os exemplos de pastas de prática foram alterados em desafio.vbs e respostas.vbs para refletir a sintaxe mais recente.ADD
- Lançamento inicial.CONFIGURAÇÃO | USO | IE-OBJETO | PROPRIEDADES | MÉTODOS | HISTÓRIA | CONTATO
Jeremy Inglaterra (SimplyCoded) - [email protected]
Distribuído sob a licença do MIT. Consulte LICENSE
para obter mais informações.