Задавал данный вопрос на Планете Эксель, но предложенные там варианты у меня не сработали, видимо, из-за моего слабого уровня в VBA. Прошу Вас помочь мне в данном вопросе. Уже который день пытаюсь разобраться, но пока тщетно(
Вопрос заключается в следующем: есть написанный макрос по заполнению веб-форм в браузере IE. Сам макрос работает нормально, формы заполняются, кнопки отправки нажимаются. На последнем этапе работы макроса, происходит нажатие на кнопку "Печать" на сайте, после чего в дополнение к открытому окну IE, открывается еще новое окно (не вкладка, именно окно) . Окно открывается не сразу, через 5-7 секунд. Мне необходимо отправить на это окно команду SendKeys "{ENTER}". Тут и возникает проблема. Чтобы отправить SendKeys, нужно на окне IE сделать фокус, но сделать фокус не получается, потому что не могу поймать новое окно. Макрос запускается с уже открытым IE, создавать необходимости нет. Окно IE ловлю с помощью такого кода:
[vba]
Код
Const sApplicationName As String = "Internet Explorer" Dim oShellWindows As New SHDocVw.ShellWindows Dim oIE As SHDocVw.WebBrowser Dim bFlag As Boolean If oShellWindows.Count = 0 Then MsgBox "не найдено открытых окон IE!", vbCritical Exit Sub End If For Each oIE In oShellWindows If oIE.Application = sApplicationName Then bFlag = True oIE.Visible = False oIE.Visible = True Exit For End If Next oIE If bFlag = False Then MsgBox "не найдено открытых окон IE!", vbCritical Exit Sub End If
[/vba]
Подскажите, пожалуйста, как можно в конце макроса сделать паузу и циклически проверять открылось ли еще одно окно IE и если оно открылось, то отправить на него SendKeys и продолжить макрос, а если все еще не открылось, то проверять открытие после паузы Sleep(100) и так, пока новое окно IE не откроется? На ум приходит что-то типа do while с loop, но сам разобраться в этом пока не могу(
Добрый день!
Задавал данный вопрос на Планете Эксель, но предложенные там варианты у меня не сработали, видимо, из-за моего слабого уровня в VBA. Прошу Вас помочь мне в данном вопросе. Уже который день пытаюсь разобраться, но пока тщетно(
Вопрос заключается в следующем: есть написанный макрос по заполнению веб-форм в браузере IE. Сам макрос работает нормально, формы заполняются, кнопки отправки нажимаются. На последнем этапе работы макроса, происходит нажатие на кнопку "Печать" на сайте, после чего в дополнение к открытому окну IE, открывается еще новое окно (не вкладка, именно окно) . Окно открывается не сразу, через 5-7 секунд. Мне необходимо отправить на это окно команду SendKeys "{ENTER}". Тут и возникает проблема. Чтобы отправить SendKeys, нужно на окне IE сделать фокус, но сделать фокус не получается, потому что не могу поймать новое окно. Макрос запускается с уже открытым IE, создавать необходимости нет. Окно IE ловлю с помощью такого кода:
[vba]
Код
Const sApplicationName As String = "Internet Explorer" Dim oShellWindows As New SHDocVw.ShellWindows Dim oIE As SHDocVw.WebBrowser Dim bFlag As Boolean If oShellWindows.Count = 0 Then MsgBox "не найдено открытых окон IE!", vbCritical Exit Sub End If For Each oIE In oShellWindows If oIE.Application = sApplicationName Then bFlag = True oIE.Visible = False oIE.Visible = True Exit For End If Next oIE If bFlag = False Then MsgBox "не найдено открытых окон IE!", vbCritical Exit Sub End If
[/vba]
Подскажите, пожалуйста, как можно в конце макроса сделать паузу и циклически проверять открылось ли еще одно окно IE и если оно открылось, то отправить на него SendKeys и продолжить макрос, а если все еще не открылось, то проверять открытие после паузы Sleep(100) и так, пока новое окно IE не откроется? На ум приходит что-то типа do while с loop, но сам разобраться в этом пока не могу(giovanni
Сообщение отредактировал giovanni - Четверг, 17.08.2017, 13:29
Большую часть телодвижений можно сделать запросами без браузера.
Спасибо за ответ! Да, я смотрел в сторону данного метода. Но пока особо ничего не понял) Могли бы вы подсказать пару ньюансов:
- можно ли заполнить форму с помощью запросов, если она динамическая, с меняющимися классами тегов в зависимости от нажатия той или иной кнопки на форме,
- подскажите куда смотреть, чтобы разобраться в этом методе ( может есть примеры доходчивые), т.к. в VBA пока понимаю не так много)
Спасибо!
UPD: я же правильно понимаю, речь идет об GET и POST запросах?
Большую часть телодвижений можно сделать запросами без браузера.
Спасибо за ответ! Да, я смотрел в сторону данного метода. Но пока особо ничего не понял) Могли бы вы подсказать пару ньюансов:
- можно ли заполнить форму с помощью запросов, если она динамическая, с меняющимися классами тегов в зависимости от нажатия той или иной кнопки на форме,
- подскажите куда смотреть, чтобы разобраться в этом методе ( может есть примеры доходчивые), т.к. в VBA пока понимаю не так много)
Спасибо!
UPD: я же правильно понимаю, речь идет об GET и POST запросах?giovanni
Сообщение отредактировал giovanni - Четверг, 17.08.2017, 14:15
В Лисе ,Хроме есть возможность просмотреть обмен с сервером. Смотрите, что отправляет браузер на сервер, что приходит в ответ. Попробуйте продублировать запросы при помощи vba. Особое внимание обращайте на заголовки запросов. Поисковая фраза для поиска в гугле,яндексе XmlHttpRequest VBA
В Лисе ,Хроме есть возможность просмотреть обмен с сервером. Смотрите, что отправляет браузер на сервер, что приходит в ответ. Попробуйте продублировать запросы при помощи vba. Особое внимание обращайте на заголовки запросов. Поисковая фраза для поиска в гугле,яндексе XmlHttpRequest VBAdoober