Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2014, 13:28   #1
Fadey001
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 19
По умолчанию Завершение InternetExplorer.Application

В общем делаю парсинг данных с веб страниц, в процессе работы скрипт создает 3 объекта IE
Код:
Set IE = CreateObject("InternetExplorer.Application")
Тут все нормально. А когда скрипт завершает свою работу вызывается метод
Код:
IE.quit
Set EI = nothing
Так для всех трех экземпляров.
Но открыв таск менеджер увидел там кучу процессов iexplorer.exe
Как правильно уничтожить этот объект что бы и процесс тоже закрылся?
А то скрипт выполняется в цикле, и после уже пяти проходов комп начинает заметно тормозить
Fadey001 вне форума Ответить с цитированием
Старый 20.08.2014, 13:35   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Set IE = CreateObject("InternetExplorer.Appl ication")
Set IE = CreateObject("InternetExplorer.Appl ication")
Set IE = CreateObject("InternetExplorer.Appl ication")

сделав так, Вы через переменную IE можете управлять только последним экземпляром InternetExplorer, связь с думя первыми - потеряна.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 20.08.2014, 13:43   #3
Fadey001
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 19
По умолчанию

Сделано было так
Код:
Set IE = CreateObject("InternetExplorer.Appl ication")
Set IE2 = CreateObject("InternetExplorer.Appl ication")
Set IE3 = CreateObject("InternetExplorer.Appl ication")
Только что после очередного прогона скрипта комп завис, хард ресет, и все стало нормально, все процессы умирают. Странно это....
Fadey001 вне форума Ответить с цитированием
Старый 20.08.2014, 14:04   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

зачем 3 IE?
для каждой ссылки - свой браузер?)

Цитата:
Set EI = nothing
а если буквы I и E местами переставить?

покажите ВЕСЬ код, - может, что и посоветуем
EducatedFool вне форума Ответить с цитированием
Старый 20.08.2014, 15:53   #5
Fadey001
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 19
По умолчанию

Дело в том что в трех браузерах грузится вся имеющаяся информация, но в конечном итоге нужна будет только часть информации по выбору пользователя, пробовал открывать все в одном окне и записывать весь исходный код в разные переменные типа объект что бы потом их обрабатывать. Но в итоге при обращении к ним получаю аксес денай. Код ниже, все урлы затерты))) это черновик пока, как только весь функционал реализую буду переписывать. Это только инициализация класса))
Код:
Sub InitializeEc(ByVal ec As String, Optional ByVal Plant As String)
    Errors = False
    If Not IsNull(Plant) Then
    EcPlant = "P901"
    Else
    EcPlant = Plant
    End If
    If Not IsNull(ec) Then
        EcNum = ec
        EcNum = Trim(EcNum)
        EcLen = Len(EcNum)
            If EcLen <> 11 Then
                Errors = True
                MsgBox "EC number is incorrect!", vbCritical, AppName
                Exit Sub
            End If
    Else
        Errors = True
        MsgBox "EC number is not defined", vbCritical, AppName
        Exit Sub
    End If
    FromDate = Format(Date, "yyyy-MM-dd")
    ToDate = Format(Date, "yyyy-MM-dd")
    bUrl = "http://Example.com/ecSearchList.do"
    tFrame = ""
    eFlags = 0
    eHeaders = "some header"
    PostData = "some data"
    PostData = StrConv(PostData, vbFromUnicode)
Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = False
    IE.navigate bUrl, eFlags, tFrame, PostData, eHeaders
While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend  
Set objCollection = IE.document.getElementsByTagName("input")
'Search special descriptor
If objCollection.Length = 0 Then
    IE.navigate bUrl, eFlags, tFrame, PostData, eHeaders
    While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
    Set objCollection = IE.document.getElementsByTagName("input")
End If
If objCollection.Length = 0 Then
    Errors = True
    MsgBox "Login in PLM system first!", vbCritical, AppName
    Exit Sub
End If
i = 0
    While i < objCollection.Length
        If objCollection(i).name = "chk" Then
 
          chk = objCollection(i).Value
        End If
        i = i + 1
    Wend
Set objCollection = Nothing
If chk = "" Then
    Errors = True
    MsgBox "Descriptor for EC " & EcNum & " is not found!", vbCritical, AppName
    Exit Sub
End If
Set ConfObj = IE.document.getElementById("list").FirstChild.Rows
ConfDate = ConfObj.item(0).Cells.item(12).innerText
fUrl = http://Example.com/ecOpenRequestReadOnly.do?ecVitaeInfos=" & chk
    IE.navigate fUrl
    While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
Set TitleObj = IE.document.getElementsByTagName("Input")("title")
title = TitleObj.Value
Set BasicInfo = IE.document.frames("basicInfoFrame").document
Set AgreeInfo = IE.document.frames("preActionFrame").document
If IsNull(BasicInfo) Then
    Errors = True
    MsgBox "EC data is not received!", vbCritical, AppName
    Exit Sub
End If
Set AgreeColl = Nothing
Set AgreeColl = AgreeInfo.getElementsByTagName("a")
    i = 0
        While i < AgreeColl.Length
            If AgreeColl.item(i).innerText = "Product Engineering agreement" Then
              chk2 = AgreeColl.item(i).pathname
                chk2 = Mid(chk2, 23, 14)
            End If
            i = i + 1
        Wend
        If chk2 = "" Then
            Errors = True
            MsgBox "Chk is not found!", vbCritical, AppName
            Exit Sub
        End If
        Set IE2 = CreateObject("InternetExplorer.Application")
            IE2.Visible = False
            IE2.navigate http://Example.com/ecOpenSubAgreement.do?agreeListInfos=" & chk2 & "&agreeTitle=Product+Engineering+agreement&vitaeInfos=" & chk & "&popup"
            While IE2.Busy Or IE2.ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
            Set AgreeContent = Nothing
            Set AgreeContent = IE2.document.getElementById("agreeUserTable")
            Set IE3 = CreateObject("InternetExplorer.Application")
            IE3.Visible = False
            IE3.navigate http://Example.com/inqueryRelatedModelInEcInfo.do?ecVitaeInfos=" & chk & "&ecrPlant=P901&plantCode=P901&divCode=11"
            While IE3.Busy Or IE3.ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
            Set AppModels = Nothing
            Set AppModels = IE3.document.getElementById("listDIV")
End Sub
А потом читаем нужные данные такими Property Get
Код:
Property Get EcAdmin() As String
    Set objCollection = Nothing
    Set objCollection = BasicInfo.getElementsByTagName("input")("ecrCcAdminNameDeptEng")
    EcAdmin = objCollection.Value
End Property
Fadey001 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление данных в "InternetExplorer" Скрипт Microsoft Office Excel 5 26.06.2013 17:56
взаимодействие с InternetExplorer frommars Visual C++ 0 22.01.2013 12:27
Завершение действия SunKnight Общие вопросы Delphi 3 12.02.2008 18:25
Завершение приложения lenivec Общие вопросы Delphi 16 05.01.2008 15:23
Завершение процесса Terran Win Api 3 04.01.2008 12:09