1

Тема: VBScript: InternetExplorer.Application, работа с фреймами

Пример демонстрирует возможность получения HTML кода фреймов загруженной страницы.

Dim InternetExplorer
'/// Создаём экземпляр нового класса
Set InternetExplorer = New InternetExplorerClass
'/// Делаем IE видимым
InternetExplorer.Application.Visible = True

InternetExplorer.Application.Navigate "http://www.myshkin.ru/frameset.htm"

'// Описываем события
Sub InternetExplorer_DocumentComplete(pDisp, URL)

    '/// Т.к в это событие сваливается загрузка каждого HTMLWindow, то ждём пока не загрузиться наше главное окно    
    if InternetExplorer.Application.LocationURL <> URL Then Exit Sub
    
    '/// Получаем ссылку на сам документ
    Set Document = pDisp.Document
    '/// Получаем объект родительского окна
    Set Window = Document.parentWindow

    '/// Подсчитываем колличество фреймов
    Dim FramesCount

    FramesCount = Window.Frames.length

    '/// Если фрейм один или их несколько
    If FramesCount > 0 Then
        MsgBox "В странице найдено " & FramesCount & " фреймов",vbInformation
        '/// Перебираем фреймы по ID
        For FrameID = 0 to Window.Frames.Length-1
            '/// Получаем фрейм как объект
            Set Frame = Window.Frames(FrameID)
            '/// Возвращаем содержимое его документа в сообщение
            MsgBox Frame.Document.body.outerhtml,vbInformation,"Содержимое фрейма " & FrameID
        Next
    Else
    '/// Если фреймов нет
        MsgBox "В странице не найдено фреймов",vbExclamation
    End if
End Sub

Sub InternetExplorer_OnQuit()
    MsgBox "Вы закрыли Internet Explorer",vbInformation,"Internet Explorer"
    Wscript.Quit
End Sub

'/// Класс модуль InternetExplorer
Class InternetExplorerClass
    Public Application

    Private Sub Class_Initialize
        '/// Вся идея в создании объекта через WScript. Вторым параметром указывается префикс функций-обработчиков событий
        Set Application = WScript.CreateObject("InternetExplorer.Application", "InternetExplorer_")
    End Sub

    Sub Class_Terminate
        '/// Для того, чтобы WScript не завершил выполнение сценария при попытке уничтожить модуль,
        '/// делаем цикл, который завершается, если объект IE перестал существовать.
        Do
            WScript.Sleep 10
        Loop Until Application = ""
    End Sub
End Class

Автор примера - Xameleon.

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

2

Re: VBScript: InternetExplorer.Application, работа с фреймами

Пример загрузки во фрейм нового содержимого. В примере создаётся страница с фреймом "frame1" и через 10 сек. содержимое этого фрейма перезагружается:

Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate("about:blank")
While IE.Busy
    WScript.Sleep 100
Wend
IE.Document.body.innerHTML= _
  "Этот текст останется, а фрейм будет перезагружен.<BR>" & _
  "<IFRAME name='frame1' src='http://forum.script-coding.com/'></IFRAME>"
IE.Visible=True
WScript.Sleep 10000
IE.Navigate "http://forum.script-coding.com/rules.html", undefined, "frame1"

То же самое вполне работает и с "чужими" страницами:

Set IE=CreateObject("InternetExplorer.Application")
IE.Visible=True
IE.Navigate "http://www.demogorgon.ru/"
WScript.Sleep 10000
IE.Navigate "http://forum.script-coding.com/", Null, "mainFrame"

Автор примеров - wisgest.

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.