Класс-оболочка автоматизации для объекта 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 автоматически создаст его, когда вы начнете использовать класс. Всплывающее окно «Авто инициализация нового объекта 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.
@возвращаться
[строка] — URL-адрес текущего процесса IE. То же, что и eIE.Base.LocationURL . Предупреждает, если процесс IE не существует.
@возвращаться
[строка] — заголовок текущего процесса 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 [строка] — URL-адрес для перехода.
Создает новую вкладку и перемещает процесс IE в это место. То же, что и eIE.Base.Navigate2 "URL_HERE", 2048 . Предупреждает, если процесс IE не существует, а затем создает его.
@парамс
url [строка] — URL-адрес для перехода.
Создает новую фоновую вкладку и перемещает процесс IE в это место. То же, что eIE.Base.Navigate2 "URL_HERE", 4096 . Предупреждает, если процесс IE не существует, а затем создает его.
@парамс
url [строка] — URL-адрес для перехода.
Ожидает завершения загрузки текущего процесса IE. Предупреждает, если процесс IE не существует.
Метод ожидает завершения загрузки введенного элемента. Текущая страница может быть загружена, но для загрузки содержимого внутри нее, например iframe, все равно может потребоваться время.
@парамс
elem [объект] — объект элемента 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 [строка] — строка запроса для получения iframe.
@возвращаться
[объект] — 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:"
Изменяет базу на другой объект Internet Explorer. Псевдоним метода Init() по умолчанию. Пример можно найти в разделе использования.
@парамс
т.е. [объект] — объект окна/вкладки Internet Explorer, на который вы хотите изменить базовый объект.
Изменяет базу на другой объект Internet Explorer. Пример можно найти в разделе использования.
@парамс
url [строка] — URL-адрес открытого в данный момент окна/вкладки Internet Explorer, на которое вы хотите изменить базовый объект.
Изменяет базу на самый последний объект Internet Explorer. Пример можно найти в разделе использования.
Использует eIE.Base.Document.querySelector(squery) для получения элемента. Вот документация по Element.querySelector(). Вот различные способы поиска элементов. Ожидает загрузки документа перед поиском, а также предупреждает и завершает работу, если его невозможно найти.
@парамс
squery [строка] — строка запроса для выбора элемента.
@возвращаться
[объект] — Найденный элемент как объект.
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 [строка] — строка запроса для выбора элементов.
@возвращаться
[объект] — найденные элементы как объект 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-ОБЪЕКТ | НЕДВИЖИМОСТЬ | МЕТОДЫ | ИСТОРИЯ | КОНТАКТ
Джереми Ингланд ( SimplyCoded ) — [email protected]
Распространяется по лицензии MIT. См. LICENSE
для получения дополнительной информации.