Функция ConnectServer предназначена для автоматизации авторизации на сайте, выполняемой путем заполнения полей с логином и паролем, и нажатием кнопки "Отправить" (т.н. "форма входа на сайт") Пример использования функции: Public Const URL_Login = "http://www.mysite.ru/private/login.php" ' страница входа Public Const URL_LoginOK = "http://www.mysite.ru/private/" ' сюда попадем, если вход удался Public Const URL_main = "http://www.mysite.ru/documents/add.php" ' а эта страница сайта нам нужна для работы Sub ПримерИспользования_ConnectServer() ' Dim IE As SHDocVw.InternetExplorer, IEdoc As HTMLDocument On Error Resume Next Set IE = ConnectServer ' авторизуемся на сервере Set IEdoc = IE.Document ' получаем ссылку на документ ' заполняем поля на сайте SetSelectElementValue IEdoc, "region", Город SetSelectElementValue IEdoc, "district", Район SetInputElementValue IEdoc, "body", Comment ' отправляем данные на сервер IEdoc.getElementsByName("add_form").Item(0).submit IE.Quit ' закрываем браузер End Sub Код функции ConnectServer: Function ConnectServer() As Object ' функция предназначена для авторизации на сайтах ' (ввод логина и пароля через веб-интерфейс) ' Возвращает объект типа InternetExplorer с загруженной страницей сайта, где мы авторизовались ' НЕНУЖНЫЕ СТРОКИ КОДА ЗАКОММЕНТИРОВАНЫ Login$ = "admin": Password$ = "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 ' для тестирования ' 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("login_r").Item(0).Value = Login$ IEdoc.getElementsByName("passwd_r").Item(0).Value = Password$ ' и отправляем данные формы на сервер IEdoc.getElementsByName("login_form").Item(0).submit 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
|
|||

Комментарии
Обратите внимание на эти строки кода:
IEdoc.getElementsByName("login_r").Item(0).Value = Login$
IEdoc.getElementsByName("passwd_r").Item(0).Value = Password$
' и отправляем данные формы на сервер
IEdoc.getElementsByName("login_form").Item(0).submit
Названия полей login_r, passwd_r и формы login_form - подходят только для моего примера.
В вашем случае названия полей будут другие
(и, скорее всего, надо предварительно обработать ошибку отсутствия сертификата)
Это был лишь пример авторизации на сайте - под конкретный сайт код нужно дорабатывать.
Помоги пожалуйста! Что я сделал не так?
Public Const URL_LoginOK = "https://br.so-ups.ru/EntityDataView/Gtp.aspx" ' сюда попадем, если вход удался
Public Const URL_main = "https://br.so-ups.ru/Export/Csv/Gtp.aspx?&date=24.01.2012>pIds=GIRKEN08" ' а эта страница сайта нам нужна для работы
Sub ПримерИспользования_ConnectServer()
' Dim IE As SHDocVw.InternetExplorer, IEdoc As HTMLDocument
On Error Resume Next
Set IE = ConnectServer ' авторизуемся на сервере
Set IEdoc = IE.Document ' получаем ссылку на документ
' заполняем поля на сайте
SetSelectElementValue IEdoc, "login", Логин
SetSelectElementValue IEdoc, "password", Пароль
'SetInputElementValue IEdoc, "body", Comment
' отправляем данные на сервер
IEdoc.getElementsByName("add_form").Item(0).submit
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 ' для тестирования
' 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("login_r").Item(0).Value = Login$
IEdoc.getElementsByName("passwd_r").Item(0).Value = Password$
' и отправляем данные формы на сервер
IEdoc.getElementsByName("login_form").Item(0).submit
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
Отправить комментарий