围绕 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
了解更多信息。