Une classe wrapper d'automatisation autour de l'objet InternetExplorer qui facilite son contrôle avec VBScript.
CONFIGURATION | UTILISATION | OBJET IE | PROPRIÉTÉS | MÉTHODES | HISTOIRE | CONTACT
Commençons par ajouter la classe à notre propre fichier 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...
Téléchargez le fichier eiea.vbs
.
Vous pouvez copier et coller ou importer le code dans votre fichier 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...
CONFIGURATION | UTILISATION | OBJET IE | PROPRIÉTÉS | MÉTHODES | HISTOIRE | CONTACT
Maintenant que nous avons ajouté la classe à notre fichier VBScript, créons-en une instance.
Set eIE = New EasyIEAutomate
'your code here
Par défaut, cela ne créera pas immédiatement un processus IE. La raison en est que si vous avez une fenêtre ou un onglet IE existant ouvert, vous pouvez récupérer ce processus au lieu d'en créer un nouveau. La création ou l'obtention d'une fenêtre existante peut être réalisée de plusieurs manières : Init() , ReBase() , RePoint() et Latest() .
Voyons quelques exemples :
' 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
La méthode ReBase() peut être utilisée à tout moment pour modifier le processus IE que la classe contrôle et n'est qu'un alias pour la méthode 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
Si vous démarrez sans processus IE, EasyIEAutomate en créera automatiquement un lorsque vous commencerez à utiliser la classe. Une fenêtre contextuelle d'une (1) seconde indiquant « Auto initialisation d'un nouvel objet IE ». je vous ferai savoir si c'est le cas.
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
CONFIGURATION | UTILISATION | OBJET IE | PROPRIÉTÉS | MÉTHODES | HISTOIRE | CONTACT
Toutes les propriétés et méthodes IE que vous utilisez sont toujours accessibles via la propriété de 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"
Si tout cela ne vous semble pas familier, je vous recommande de consulter toutes les principales propriétés et méthodes ici.
CONFIGURATION | UTILISATION | OBJET IE | PROPRIÉTÉS | MÉTHODES | HISTOIRE | CONTACT
Passons maintenant à certaines des nouvelles propriétés ajoutées.
@retour
[array] - Un tableau de processus IE disponibles (fenêtres et onglets).
' 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"
@retour
[objet] - L'objet principal d'Internet Explorer. Voir objet IE.
@retour
[string] - L'URL du processus IE actuel. Identique à eIE.Base.LocationURL . Alertes si aucun processus IE n’existe.
@retour
[string] - Le titre du processus IE actuel. Identique à eIE.Base.LocationName . Alertes si aucun processus IE n’existe.
CONFIGURATION | UTILISATION | OBJET IE | PROPRIÉTÉS | MÉTHODES | HISTOIRE | CONTACT
Ferme le processus IE actuel. Identique à eIE.Base.Quit . Alertes si aucun processus IE n’existe.
Ferme tous les processus IE ouverts (cachés ou visibles).
Définit la visibilité du processus IE actuel sur true. Identique à eIE.Base.Visible = True . Alerte si aucun processus IE n’existe, puis en crée un.
Définit la visibilité du processus IE actuel sur false. Identique à eIE.Base.Visible = False . Alerte si aucun processus IE n’existe, puis en crée un.
Centre la fenêtre sur l'écran. Si aucun site Web n'est chargé, un site Web contenant "about:blank" sera consulté. Un site Web chargé est nécessaire pour obtenir la résolution de l'écran.
Set eIE = ( New EasyIEAutomate)(vbUseDefault)
' Centering before the browser is visible makes for a nicer looking experience.
eIE.Center
eIE.Show
Navigue le processus IE vers cet emplacement. Identique à eIE.Base.Navigate2 "URL_HERE" . Alerte si aucun processus IE n’existe, puis en crée un.
@params
url [string] - Une URL d'adresse vers laquelle accéder.
Crée un nouvel onglet et navigue dans le processus IE jusqu'à cet emplacement. Identique à eIE.Base.Navigate2 "URL_HERE", 2048 . Alerte si aucun processus IE n’existe, puis en crée un.
@params
url [string] - Une URL d'adresse vers laquelle accéder.
Crée un nouvel onglet d'arrière-plan et navigue dans le processus IE jusqu'à cet emplacement. Identique à eIE.Base.Navigate2 "URL_HERE", 4096 . Alerte si aucun processus IE n’existe, puis en crée un.
@params
url [string] - Une URL d'adresse vers laquelle accéder.
Attend que le processus IE actuel termine son chargement. Alertes si aucun processus IE n’existe.
La méthode attend que l'élément saisi termine son chargement. La page actuelle peut être chargée, mais le contenu qu'elle contient, comme une iframe, peut encore prendre du temps pour se charger.
@params
elem [object] - Un objet élément HTML comme une 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:"
Il existe cependant un moyen plus simple. L'exemple suivant fait la même chose que celui-ci en utilisant une fonction appelée Deeper() .
La méthode attend que l'élément se charge, puis renvoie le contentDocument du cadre. Alerte et quitte le script si la même politique d'origine est violée. Utilisé pour accéder/modifier des éléments dans un cadre.
@params
squery [string] - Une chaîne de requête pour obtenir l'iframe.
@retour
[object] - Le contentDocument de l'élément frame en tant qu'objet.
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:"
Remplace la base par un autre objet Internet Explorer. Alias pour la méthode Init() par défaut. Un exemple peut être trouvé dans la section utilisation.
@params
c'est-à-dire [objet] - L'objet fenêtre/onglet Internet Explorer vers lequel vous souhaitez modifier l'objet de base.
Remplace la base par un autre objet Internet Explorer. Un exemple peut être trouvé dans la section utilisation.
@params
url [chaîne] - URL d'une fenêtre/onglet Internet Explorer actuellement ouvert et vers lequel vous souhaitez modifier l'objet de base.
Remplace la base par l'objet Internet Explorer le plus récent. Un exemple peut être trouvé dans la section utilisation.
Utilise eIE.Base.Document.querySelector( squery ) pour récupérer un élément. Voici la documentation sur Element.querySelector(). Voici les différentes manières de rechercher des éléments. Attend que le document se charge avant de lancer la recherche, alerte et se ferme s'il est introuvable.
@params
squery [string] - La chaîne de requête avec laquelle sélectionner l'élément.
@retour
[object] - L'élément trouvé en tant qu'objet.
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
Utilise eIE.Base.Document.querySelectorAll( squery ) pour récupérer une NodeList. Voici les différentes manières de rechercher des éléments. Attend que le document se charge avant de rechercher, et alerte et quitte si quelque chose ne peut pas être trouvé.
@params
squery [string] - La chaîne de requête avec laquelle sélectionner les éléments.
@retour
[object] - Les éléments trouvés en tant qu'objet 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
CONFIGURATION | UTILISATION | OBJET IE | PROPRIÉTÉS | MÉTHODES | HISTOIRE | CONTACT
ADD
- Documentation ajoutée à README.md .CHANGE
- Méthodes renommées comme suit : NavigateT() en NavigateTab() et NavigateBT() en NavigateBgTab() .CHANGE
- ReBase() est désormais un alias pour la méthode Default Init() .ADD
- Des fenêtres contextuelles chronométrées pour les erreurs ne valent pas la peine d'être abandonnées. Consultez la documentation pour connaître les méthodes d'alerte.CHANGE
- Les exemples de dossiers d'entraînement ont été modifiés dans challenge.vbs et Answers.vbs pour refléter la syntaxe la plus récente.ADD
- Version initiale.CONFIGURATION | UTILISATION | OBJET IE | PROPRIÉTÉS | MÉTHODES | HISTOIRE | CONTACT
Jeremy Angleterre (SimplyCoded) - [email protected]
Distribué sous licence MIT. Voir LICENSE
pour plus d’informations.