圍繞 InternetExplorer 物件的自動化包裝類,可以輕鬆使用 VBScript 進行控制。
設定|使用方法| 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()和Latest() 。
讓我們來看一些例子:
' 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 會在您開始使用該類別時自動建立一個。一 (1) 秒彈出「自動初始化新的 IE 物件」。如果確實如此,我們會通知您。
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屬性和方法仍然可以透過基本屬性存取。
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-對象|屬性|方法|歷史|接觸
現在讓我們來看看新增的一些新屬性。
@返回
[array] - 可用 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"
@返回
[object] - 主要 Internet Explorer 物件。請參閱 IE 對象。
@返回
[string] - 目前 IE 進程的 URL。與eIE.Base.LocationURL相同。如果不存在 IE 進程則發出警報。
@返回
[string] - 目前 IE 進程的標題。與eIE.Base.LocationName相同。如果不存在 IE 進程則發出警報。
設定|使用方法| IE-對象|屬性|方法|歷史|接觸
關閉目前 IE 進程。與eIE.Base.Quit相同。如果不存在 IE 進程則發出警報。
關閉所有開啟的 IE 進程(隱藏或可見)。
將目前 IE 進程的可見性設為 true。與eIE.Base.Visible = True相同。如果不存在 IE 進程,則發出警報,然後建立一個。
將目前 IE 進程的可見性設定為 false。與eIE.Base.Visible = False相同。如果不存在 IE 進程,則發出警報,然後建立一個。
將視窗置於螢幕中央。如果沒有載入任何網站,則會導覽至具有「about:blank」的網站。需要載入網站才能取得螢幕解析度。
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 進程,則發出警報,然後建立一個。
@參數
url [string] - 要導航到的地址 url。
建立一個新選項卡並將 IE 進程導航到此位置。與eIE.Base.Navigate2 "URL_HERE", 2048相同。如果不存在 IE 進程,則發出警報,然後建立一個。
@參數
url [string] - 要導航到的地址 url。
建立一個新的後台標籤並將 IE 進程導航到該位置。與eIE.Base.Navigate2 "URL_HERE", 4096相同。如果不存在 IE 進程,則發出警報,然後建立一個。
@參數
url [string] - 要導航到的地址 url。
等待目前 IE 進程完成載入。如果不存在 IE 進程則發出警報。
此方法等待輸入的元素完成載入。當前頁面可以加載,但其中的內容(如 iframe)可能仍需要時間加載。
@參數
elem [object] - HTML 元素對象,如 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:"
不過,還有一種更簡單的方法。下一個範例透過使用名為Deeper() 的函數執行與此相同的操作。
方法等待元素加載,然後返回框架的 contentDocument。如果違反同源策略,則發出警報並退出腳本。用於存取/編輯框架內的內容。
@參數
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() 方法的別名。可以在使用部分找到一個範例。
@參數
即[object] - 您想要將基本物件變更為的 Internet Explorer 視窗/選項卡物件。
將 Base 變更為不同的 Internet Explorer 物件。可以在使用部分找到一個範例。
@參數
url [string] - 目前開啟的 Internet Explorer 視窗/標籤(您要將基本物件變更為該視窗/選項卡)的 url。
將 Base 變更為最新的 Internet Explorer 物件。可以在使用部分找到一個範例。
使用eIE.Base.Document.querySelector( squery )檢索元素。這是有關 Element.querySelector() 的文檔。以下是搜尋元素的各種方法。在搜尋之前等待文件加載,如果找不到則發出警報並退出。
@參數
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。以下是搜尋元素的各種方法。在搜尋之前等待文件加載,如果找不到某些內容,則會發出警報並退出。
@參數
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()現在是 Default Init()方法的別名。ADD
- 定時彈出視窗顯示不值得退出的錯誤。請參閱文件以了解哪些方法發出警報。CHANGE
-challenge.vbs和answers.vbs中的練習資料夾範例已更改,以反映最新語法。ADD
- 初始版本。設定|使用方法| IE-對象|屬性|方法|歷史|接觸
傑里米英格蘭 ( SimplyCoded ) - [email protected]
根據麻省理工學院許可分發。請參閱LICENSE
以了解更多資訊。