1

Тема: VBS Сохранить .html из фрейма

Доброго времени суток!
Необходимо мне сохранить один html документ, который находится в одном из фреймов. Для того чтоб сохранить содержимое именно того фрейма я в URL ищу определенную комбинацию символов. Должно работать, но когда запускаю выскакивает ошибка: Интерфейс не поддерживается. Код: 80004002

Sub IE_DocumentComplete(pDisp, URL)

    If InStr(URL, "123") > 0 Then
        Set Document = pDisp.Document
        Set Window = Document.parentWindow
        Set Frame = Window.Frames(FrameID)    'На этой строке ошибка
        Set File = fso.createtextfile("C:/1.html")
        File.Write (Frame)
        File.Close
    End If

End Sub

Помогите! В чем может быть ошибка?

2

Re: VBS Сохранить .html из фрейма

Доступ к содержимому фрейма осуществляется посредством свойства windowContent, которое доступно после события onload фрейма.

3

Re: VBS Сохранить .html из фрейма

JSman пишет:

Доступ к содержимому фрейма осуществляется посредством свойства windowContent, которое доступно после события onload фрейма.

Меня интересует WSH. Вбил в код процедуру события Window_OnLoad(), а оно не произошло.... Это событие вероятно для HTA. Погуглил, ничего толкового не нашел. Внесу еще одну очень важную точность: Когда в этом фрейме переходишь по какой нибудь ссылке, остальная страница не перегружается. После загрузки этого фрейма мне и нужно сохранить HTML.

4 (изменено: Mickey666x, 2011-09-11 19:07:38)

Re: VBS Сохранить .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

Вместо вывода сообщения я сохранил все html с каждого фрейма. Но опять же.... Код не работает пока не перегрузится родительский фрейм. Мистика! Все упирается в FrameID Когда выбрасываю все лишнее опять ошибка. Как с этим бороться? Помогите! Ну очень нужно!