VBScript による制御を容易にする InternetExplorer オブジェクトのオートメーション ラッパー クラス。
セットアップ|使用法| IE-オブジェクト|プロパティ|方法|歴史|接触
まず、クラスを独自の 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...
eiea.vbs
ファイルをダウンロードします。
コードをコピーして貼り付けるか、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...
セットアップ|使用法| IE-オブジェクト|プロパティ|方法|歴史|接触
クラスを VBScript ファイルに追加したので、そのインスタンスを作成しましょう。
Set eIE = New EasyIEAutomate
'your code here
デフォルトでは、これにより IE プロセスはすぐには作成されません。この理由は、既存の IE ウィンドウまたはタブを開いている場合に、新しいプロセスを作成する代わりにそのプロセスを取得できるようにするためです。既存のウィンドウの作成または取得は、 Init() 、 ReBase() 、 RePoint() 、および最新()といういくつかの方法で行うことができます。
いくつかの例を見てみましょう。
' 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
ReBase()メソッドは、クラスが制御する IE プロセスを変更するためにいつでも使用でき、 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
IE プロセスを使用せずに開始した場合、クラスの使用を開始するときに EasyIEAutomate によって自動的に IE プロセスが作成されます。 「新しい IE オブジェクトを自動初期化しました」という 1 秒間のポップアップ。そうなった場合はお知らせします。
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
セットアップ|使用法| IE-オブジェクト|プロパティ|方法|歴史|接触
使い慣れているすべての IEプロパティとメソッドには、引き続き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"
これらすべてに馴染みがないように思われる場合は、ここですべての主要なプロパティとメソッドを確認することをお勧めします。
セットアップ|使用法| IE-オブジェクト|プロパティ|方法|歴史|接触
ここで、追加された新しいプロパティのいくつかを見てみましょう。
@戻る
[配列] - 利用可能な IE プロセス (ウィンドウとタブ) の配列。
' 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"
@戻る
[オブジェクト] - Internet Explorer のメイン オブジェクト。 「IE オブジェクト」を参照してください。
@戻る
[文字列] - 現在の IE プロセスの URL。 eIE.Base.LocationURLと同じ。 IE プロセスが存在しない場合に警告します。
@戻る
[文字列] - 現在の IE プロセスのタイトル。 eIE.Base.LocationNameと同じ。 IE プロセスが存在しない場合に警告します。
セットアップ|使用法| IE-オブジェクト|プロパティ|方法|歴史|接触
現在の IE プロセスを閉じます。 eIE.Base.Quitと同じ。 IE プロセスが存在しない場合に警告します。
開いているすべての IE プロセス (非表示または表示) を閉じます。
現在の IE プロセスの可視性を true に設定します。 eIE.Base.Visible = Trueと同じです。 IE プロセスが存在しない場合は警告を発し、IE プロセスを作成します。
現在の IE プロセスの可視性を false に設定します。 eIE.Base.Visible = Falseと同じです。 IE プロセスが存在しない場合は警告を発し、IE プロセスを作成します。
ウィンドウを画面の中央に配置します。 Web サイトが読み込まれていない場合は、「about:blank」を含む Web サイトに移動します。画面解像度を取得するには、読み込まれた Web サイトが必要です。
Set eIE = ( New EasyIEAutomate)(vbUseDefault)
' Centering before the browser is visible makes for a nicer looking experience.
eIE.Center
eIE.Show
IE プロセスをこの場所に移動します。 eIE.Base.Navigate2 "URL_HERE"と同じです。 IE プロセスが存在しない場合は警告を発し、IE プロセスを作成します。
@params
url [文字列] - 移動先のアドレス URL。
新しいタブを作成し、IE プロセスをこの場所に移動します。 eIE.Base.Navigate2 "URL_HERE", 2048と同じ。 IE プロセスが存在しない場合は警告を発し、IE プロセスを作成します。
@params
url [文字列] - 移動先のアドレス URL。
新しい背景タブを作成し、IE プロセスをこの場所に移動します。 eIE.Base.Navigate2 "URL_HERE", 4096と同じ。 IE プロセスが存在しない場合は警告を発し、IE プロセスを作成します。
@params
url [文字列] - 移動先のアドレス URL。
現在の IE プロセスの読み込みが完了するまで待機します。 IE プロセスが存在しない場合に警告します。
このメソッドは、入力された要素の読み込みが完了するまで待機します。現在のページは読み込まれる可能性がありますが、iframe などのそのページ内のコンテンツの読み込みにはまだ時間がかかる可能性があります。
@params
elem [オブジェクト] - iframe のような HTML 要素オブジェクト。
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:"
ただし、もっと簡単な方法があります。次の例では、 Deeper()という関数を使用して、この例と同じことを行います。
メソッドは要素がロードされるのを待ってから、フレームの contentDocument を返します。同一生成元ポリシーに違反した場合は、警告を発してスクリプトを終了します。フレーム内の内容にアクセスしたり編集したりするために使用されます。
@params
squery [string] - iframe を取得するためのクエリ文字列。
@戻る
[object] - オブジェクトとしてのフレーム要素の contentDocument。
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:"
Base を別の Internet Explorer オブジェクトに変更します。デフォルトの Init() メソッドのエイリアス。例は使用法のセクションにあります。
@params
ie [オブジェクト] - Base オブジェクトを変更する Internet Explorer のウィンドウ/タブ オブジェクト。
Base を別の Internet Explorer オブジェクトに変更します。例は使用法のセクションにあります。
@params
url [文字列] - 現在開いている、Base オブジェクトを変更する Internet Explorer ウィンドウ/タブの URL。
Base を最新の Internet Explorer オブジェクトに変更します。例は使用法のセクションにあります。
eIE.Base.Document.querySelector( squery )を使用して要素を取得します。ここに Element.querySelector() に関するドキュメントがあります。要素を検索するさまざまな方法を次に示します。ドキュメントがロードされるのを待ってから検索し、見つからない場合は警告を発して終了します。
@params
squery [string] - 要素を選択するためのクエリ文字列。
@戻る
[object] - オブジェクトとして見つかった要素。
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
eIE.Base.Document.querySelectorAll( squery )を使用して NodeList を取得します。要素を検索するさまざまな方法を次に示します。検索する前にドキュメントがロードされるのを待ち、何かが見つからない場合は警告を発して終了します。
@params
squery [string] - 要素を選択するためのクエリ文字列。
@戻る
[object] - 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
セットアップ|使用法| IE-オブジェクト|プロパティ|方法|歴史|接触
ADD
- README.mdにドキュメントが追加されました。CHANGE
- メソッドの名前が次のように変更されました: NavigateT()からNavigateTab() 、およびNavigateBT()からNavigateBgTab() 。CHANGE
- ReBase() は、デフォルトのInit()メソッドのエイリアスになりました。ADD
- やり直す価値のないエラーを時限ポップアップで表示します。どのメソッドが警告を発するかについては、ドキュメントを参照してください。CHANGE
- 最新の構文を反映するために、 Challenge.vbsとAnswers.vbsの練習フォルダーの例が変更されました。ADD
- 初期リリース。セットアップ|使用法| IE-オブジェクト|プロパティ|方法|歴史|接触
Jeremy England ( SimplyCoded ) - [email protected]
MIT ライセンスに基づいて配布されます。詳細については、 LICENSE
を参照してください。