Vba авторизация на сайте

Что-то не понятно. Ты хочешь залогиниться не октрывая IE? Тогда какой смысл?

2Arches Я тоже долго копал в этом направлении. Вот что накопал:Не забудьте кинуть на форму контрол WebBrowser. Может кому будет полезным =) Не забудьте доработать напильником!На будущее, есть приблуда к ослику IEWatch, которая показывает что отправляется в post на сервер!

Это для себя заметка, тем, кто в курсе, ничего тут нового нет.

В трейдинге часто необходимо скачивать данные с различных сайтов. Порой для этого необходимо повторить много однотипных действий. Естественно, это удобно автоматизировать. Поскольку данные обычно—числа, то их удобно обрабатывать экселем (это если чисел не очень много. Много—это, например, тиковые данные чего-нибудь типа RI). Известно, что VBA в связке с экселем является очень удобным инструментом для работы с цифрами. Поэтому логично и парсить сайты тоже при помощи экселя.

Функция ConnectServer предназначена для автоматизации авторизации на сайте, выполняемой путем заполнения полей с логином и паролем, и нажатием кнопки "Отправить" (т.н. "форма входа на сайт")

Пример использования функции:

Код функции ConnectServer:

  • 30907 просмотров

Комментарии

Удалите эти строки, — к данному примеру они отношения не имеют, а необходимый код (этих функций) у меня утерян.
Суть функции, — в авторизации, и возврате объекта, ссылающегося на документ IE

Подскажите, какие библиотеки надо подключать, все эти вещи компилятор не пропускает SetSelectElementValue, SetSelectElementValue IEdoc, SetInputElementValue IEdoc

Нет
Код использует компоненты Windows, которых на Mac просто нет
Для Mac можно написать аналогичный по функционалу код, — но он будет совсем другим

Здравствуйте! подскажите можно ли исправить этот код для работы на macOS?

СПАСИБО. И за пример и за оперативность! Я вам очень благодарна!

Выложил пример нужного вам кода (загрузка файла с авторизацией):
http://excelvba.ru/code/DownloadFileWithAuth

Спасибо, за ответ! Буду с нетерпением ждать, надеюсь всё таки способ найду, с авторизацией же разобралась. Решение уже близко, по крайней мере, хочется в это верить.

Читайте также:  Php json decode online

да, есть способ скачать файл с авторизацией
но там совсем другой код, и он сложнее
кроме того, по каждый сайт авторизация выполняется по-разному
Навскидку не могу дать пример кода.
Если будет время, — как-нибудь опубликую отдельной статьёй.

Добрый день спасибо за ваши подсказки, благодаря вашей статье и ещё на одном сайте, настроила авторизацию на сайт, переходы по ссылкам работают, да вот беда когда начинаешь закачивать файлы по средством:
Function DownloadFile(FromPathName, ToPathName) As Boolean
DownloadFile = URLDownloadToFile(0, FromPathName, ToPathName, 0, 0) = 0
End Function

URL$ = ""
FileName$ = ""
IE.Navigate URL$
Set ieDoc = IE.Document: DoEvents: DoEvents
DownloadFile URL$, FileName$.
Качается файл с содержимым окна о не пройденной авторизации, может подскажете как обойти это? Может есть ещё какой то метод?

Что могу сказать:
1) в функции ConnectServer куча ошибок, — что за символы ";" появились?
вы разве не видите, что VBA эти строки красным подсвечивает?
2) функция ConnectServer не имеет никакого отношения к веб-запросу (QueryTables.Add)
так что совмещение этих 2 способов подключения к сайту ничего не даст
3) код пишется под конкретный сайт
чтобы протестировать его, надо знать адрес конкретного сайта, и действующие логин с паролем
4) хотите готовый макрос? Оформляйте заказ, и прикрепляйте пример результата.
Работы тут много, — там что это не бесплатно.

Прошу помощи у Гуру. Не могу понять, где ошибка закралась. Целиком и пошагово скрипт отрабатывает без ошибок, в Excel’е создается подключение и диапазон, в который почему-то переносится только 2 пустые ячейки. Предыстория: есть портал, необходимо на нем авторизоваться и затем по некоторому адресу забрать в Excel табличку с некоторым id. Вот код:

попробовал использовать этот код для своих целей, поля авторизации заполняет правильно, а вот нажать на кнопку не получается.
Помогите, как из VBA нажать на кнопку "войти" на сайте:
www_heroeswm_ru

Читайте также:  Inshot как наложить музыку на видео

у меня почему то не работает команда submit. тоесть все данные вбиваются но приходиться нажимать вручную!

Public Const URL_Login = "https://www.atsenergo.ru/auth" ‘ ñòðàíèöà âõîäà
Public Const URL_LoginOK = "https://www.atsenergo.ru/reporting/personal/" ‘ ñþäà ïîïàäåì, åñëè âõîä óäàëñÿ
Public Const URL_main = "https://www.atsenergo.ru/reporting/personal/eur/sell_norem/20130922" ‘ à ýòà ñòðàíèöà ñàéòà íàì íóæíà äëÿ ðàáîòû

Sub ÏðèìåðÈñïîëüçîâàíèÿ_ConnectServer()
‘ Dim IE As SHDocVw.InternetExplorer, IEdoc As HTMLDocument
On Error Resume Next
Set IE = ConnectServer ‘ àâòîðèçóåìñÿ íà ñåðâåðå

Set IEdoc = IE.Document ‘ ïîëó÷àåì ññûëêó íà äîêóìåíò

IE.Quit ‘ çàêðûâàåì áðàóçåð
End Sub

Function ConnectServer() As Object
‘ ôóíêöèÿ ïðåäíàçíà÷åíà äëÿ àâòîðèçàöèè íà ñàéòàõ
‘ (ââîä ëîãèíà è ïàðîëÿ ÷åðåç âåá-èíòåðôåéñ)
‘ Âîçâðàùàåò îáúåêò òèïà InternetExplorer ñ çàãðóæåííîé ñòðàíèöåé ñàéòà, ãäå ìû àâòîðèçîâàëèñü
‘ ÍÅÍÓÆÍÛÅ ÑÒÐÎÊÈ ÊÎÄÀ ÇÀÊÎÌÌÅÍÒÈÐÎÂÀÍÛ

Login$ = "лялялял": Password$ = "ляляля " ‘ óêàæèòå çäåñü ëîãèí è ïàðîëü äëÿ ñàéòà
On Error Resume Next: Err.Clear
‘ Dim pi As New ProgressIndicator
‘ pi.Show "Îòïðàâêà îáúÿâëåíèé íà ñàéò ðèýëòîðñêîãî àãåíñòâà. "
Pi.StartNewAction 5, 10, "Óñòàíîâêà ñîåäèíåíèÿ ñ ñåðâåðîì . "
Set IE = CreateObject("InternetExplorer.Application")
‘ IE.Visible = True ‘ äëÿ òåñòèðîâàíèÿ
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True ‘ äëÿ òåñòèðîâàíèÿ
IE.Silent = True ‘ïîäàâëåíèå âñïëûâàþùèõ îêîí Explorer

‘ pi.StartNewAction 10, 50, "Çàãðóçêà ñòðàíèöû àâòîðèçàöèè . ", , , 10
IE.Navigate URL_Login
‘ æä¸ì, ïîêà ñòðàíèöà çàãðóçèòüñÿ
‘ t = Timer: While IE.Busy Or (IE.ReadyState <> 4)
‘ DoEvents: If Timer — t > 0.1 Then pi.SubAction: t = Timer
‘ Wend: DoEvents
While IE.Busy Or (IE.ReadyState <> 4): DoEvents: Wend

‘ pi.StartNewAction 50, 80, "Àâòîðèçàöèÿ íà ñåðâåðå. ", , , 15

Set IEdoc = IE.Document: DoEvents: DoEvents

‘ çàïîëíÿåì ïîëÿ ñ ëîãèíîì è ïàðîëåì
IEdoc.getElementsByName("j_usercode").Item(0).Value = Login$
IEdoc.getElementsByName("j_username").Item(0).Value = Login$
IEdoc.getElementsByName("j_password").Item(0).Value = Password$
‘ è îòïðàâëÿåì äàííûå ôîðìû íà ñåðâåð

Читайте также:  Самые популярные запросы в яндексе сегодня

IEdoc.getElementsByName("action").Item(0).submit
IE.Visible = True ‘ äëÿ òåñòèðîâàíèÿ
IE.Silent = True ‘ïîäàâëåíèå âñïëûâàþùèõ îêîí Explorer

If Err Then MsgBox "Íå óäà¸òñÿ çàãðóçèòü ñòðàíèöó", vbCritical: End
‘ æä¸ì, ïîêà ñòðàíèöà çàãðóçèòüñÿ
‘ t = Timer: While IE.Busy Or (IE.ReadyState <> 4)
‘ DoEvents: If Timer — t > 0.1 Then pi.SubAction: t = Timer
‘ Wend
While IE.Busy Or (IE.ReadyState <> 4): DoEvents: Wend

If IE.LocationURL <> URL_LoginOK Then
MsgBox "Ëîãèí èëè ïàðîëü íåâåðíû!", vbCritical, "Îøèáêà àâòîðèçàöèè": Pi.Hide: End
End If

‘ pi.StartNewAction 80, 100, "Çàãðóçêà ñòðàíèöû îòïðàâêè îáúÿâëåíèé . ", , , 10
IE.Navigate URL_main
‘ æä¸ì, ïîêà ñòðàíèöà çàãðóçèòüñÿ
‘ t = Timer: While IE.Busy Or (IE.ReadyState <> 4)
‘ DoEvents: If Timer — t > 0.1 Then pi.SubAction: t = Timer
‘ Wend
While IE.Busy Or (IE.ReadyState <> 4): DoEvents: Wend

Set ConnectServer = IE
‘ pi.Hide
End Function

Нашел, вопрос решается с помощью кода после создания объекта IE:

Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True ‘ для тестирования
IE.Silent = True ‘подавление всплывающих окон Explorer

По завершения работы процедуры регистрации, выходит стандартное окно: "открыть или сохранить этот файл?" Где-то в интернете видел что это стандартное окно блокнота, как согласиться на сохранение файла?

В какой книге можно подробнее почитать о получении/передаче информации в интернете?

При обработки этого кода выходит сообщение "Отображать только безопасное содержимое веб-старниц?". Как с ним бороться если нет возможности отключить это всплывающее окно в IExplorer?

Обратите внимание на эти строки кода:

Названия полей login_r, passwd_r и формы login_form — подходят только для моего примера.
В вашем случае названия полей будут другие
(и, скорее всего, надо предварительно обработать ошибку отсутствия сертификата)

Это был лишь пример авторизации на сайте — под конкретный сайт код нужно дорабатывать.