Страницы: 1
RSS
Работа с InternetExplorer: получение выписки ЕГРН после заполнения поля на сайте, Запуск (отработка) событий на сайте
 
Доброго времени суток, Товарищи.
Помогите разобраться, может у кого-то знания есть в этой области.
Код
#If Win64 Then
    Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
Sub Vipiska()
' подключено две библиотеки  microsoft internet controls и microsoft html object library
Dim IE As InternetExplorer
Dim PageHTML As HTMLDocument
Dim Sayt As String

Sayt = "https://rosreestr.gov.ru/wps/portal/p/cc_present/EGRN_3" '  ссылка на сайт

Set IE = New InternetExplorer ' открываем IE
IE.Visible = True ' Делаем IE видимым
IE.Navigate Sayt ' загружаем сайт

Sleep dwMilliseconds:=5000 ' На всякий жду 5 сек, чтобы уже точно все прогрузилось.

Do While IE.Busy = True ' Ещё раз проверяю что страница загружена полностью
Loop

Dim ColElements As Collection
Set ColElements = New Collection

Set PageHTML = IE.Document ' загоняем страницу в переменную

For Each FR In PageHTML.all ' цикл по всем элементам на странице
      If FR.className = "v-filterselect-input" Then ' "v-filterselect-input" - нашёл в коде HTML
         ColElements.Add FR ' Добавляем элемент в коллекцию
      End If
Next
' Выяснил через код HTML, что № элемента который я хочу изменить - это 4

ColElements(4).Value = "Российское юридическое лицо" ' изменяю значение
ColElements(4).Click ' на всякий кликую, для отработки события, но ничего не происходит

' откопал событие (я так надеюсь), которое должно возникать при Click и пытаюсь его запустить с помощью нижеуказанной процедуры, но всё равно ничего не происходит.

PageHTML.parentWindow.execScript "function jd(b){return function(){try{return kd(b,this,arguments)}catch(a){throw a}}}", "JScript"

End Sub
Если вышеуказанную процедуру выполнить ручками, то на сайте сработает событие и добавятся новые поля. Document как бы обновиться.
Перепробовал кучу разных вариантов и перемещал фокус и кликал на другие элементы. но всё безуспешно.

Вопрос как запустить события (скрипты) на странице?
 
Sergoff, из имеющегося названия темы разве можно понять задачу? Что должен делать макрос? предложите новое - модераторы поменяют.
 
Юрий М, Да, согласен. Но не могу тему изменить, не знаю как это сделать.
Задача макроса получение выписки ЕГРН. но сначала нужно заполнить поля на сайте, вот тут  затык и произошёл.
 
Sergoff, Юрий попросил вас придумать более правильное название и написать её в своем сообщении и он написал, что тему поменяют модераторы, а не вы. А вы пишите - не знаю, как поменять тему. Нужно ещё пару раз прочитать то, что написал Юрий и понять смысл его слов
Изменено: New - 01.03.2021 01:47:21
 
Добавьте в конец кода функцию
Код
Sub IE_RaiseEvents(ByRef EL As Object, ByVal events$)
    On Error Resume Next
    Dim eventObj As Object, event_name
    events$ = Replace(events$, ";", ",")
    
    For Each event_name In Split(events$, ",")
        EL.raiseEvent "on" & event_name        ' for IE8
        
        Set eventObj = IE.document.createEvent("HTMLEvents")
        eventObj.initEvent event_name, True, False        ' for IE9 or newer
        EL.dispatchEvent eventObj
    Next
    Set eventObj = Nothing
End Sub


а в ваш макрос, после строки ColElements(4).Click
строки
Код
IE_RaiseEvents ColElements(4), "click,keydown,change" 
 
Игорь, Приветствую.
Спасибо, но этот вариант я ранее тоже пробовал, и он у меня не работает.
 
Значит, какое-то другое событие нужно генерировать (а не одно из трех, которые я прописал),
или для другого элемента страницы (родительского элемента поля, например)
Мой способ проверен на множестве сайтов, - если правильный объект передать (EL As Object) в функцию, и задать нужное событие, то скрипт обработает это событие.

ну и Dim IE As InternetExplorer должен быть объявлен ВНЕ вашего макроса,
иначе моя функция просто не видит, что это за объект IE, к которому идет обращение
 
Игорь, Спасибо за наводку по поводу родительских элементов, буду пробовать.
Страницы: 1
Наверх