Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / getElementById / 9 сообщений из 9, страница 1 из 1
16.09.2019, 07:25
    #39862117
l-evgene
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementById
Добрый день.
Пытаюсь обработать форму авторизации на Яндекс Почте:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub testIE()    ' поля в форме
Dim texto As String, str_URL As String
Dim strЛогин As String, strПароль As String
Dim ie As Object
Dim html As Object
Set ie = CreateObject("InternetExplorer.Application")
strЛогин = "***"
strПароль = "***"
str_URL = "https://passport.yandex.ru/auth?from=mail&origin=hostroot_homer_auth_ru&retpath=https%3A%2F%2Fmail.yandex.ru%2F%3Fuid%3D50723641%2523message%2F1702923609......."
    With ie
        .Navigate str_URL
            Do Until Not ie.Busy And ie.ReadyState = 4
                DoEvents
            Loop
        .Visible = True
    End With
Set html = ie.Document
html.getElementById("passp-field-login").Value = strЛогин      'поле "введите логин"
html.getElementById("hiddenPassword").Value = strПароль        'поле "введите пароль"
html.getElementById("control button2 button2_view_classic button2_size_l button2_theme_action button2_width_max button2_type_submit passp-form-button").Click

И здесь обнаружил, что у кнопки "Войти" нет Id.
Есть какой-нибудь еще способ обращения к контролу формы, кроме getElementById, который "проглатывает" VBA?
...
Рейтинг: 0 / 0
16.09.2019, 09:30
    #39862144
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementById
l-evgene,
Попробуйте селектор по имени: getElementsByTagName
...
Рейтинг: 0 / 0
16.09.2019, 22:21
    #39862526
l-evgene
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementById
Сергей Лалов, спасибо!
Получилось.
...
Рейтинг: 0 / 0
17.09.2019, 13:15
    #39862816
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementById
l-evgeneСергей Лалов, спасибо!
Получилось.

Ну и отлично)

Если есть возможность, можно подключить в качестве почтового агента к яндексу ms outlook. Он как и почти любой офисный продукт от майкрософт поддерживает VBA . Можно подключить в случае чего все те же самые библиотеки,что и в Ms Access.
И настроить совместную работу аутлука и аксесса.
У меня к примеру в аутлуке висит макрос на получение писем и автоматическую обработку ответов. К примеру при получении письма от определенного адресата, vba автоматом сканирует содержимое письма , находит в теле письма ключевые теги, данные из тегов записывает автоматом в базу MS Access, а приложенное содержимое/документы (если такое имеется) складывает автоматом в определенную папку. Это все происходит без участия пользователя.

Интеграция приложений у MS на уровне. VBA ничем не отличается практически.
...
Рейтинг: 0 / 0
18.09.2019, 03:55
    #39863127
l-evgene
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementById
Сергей, а не пробовали заморочиться таким вопросом.
Вот на этой операции:
Код: vbnet
1.
Set html = ie.Document

из объекта IE получается объект HTMLDocument.
А что за зверь появляется здесь:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim oHttp1 As Object
Dim str_URL As String
str_URL = "https://passport.yandex.ru/auth?from=mail&origin=hostroot_homer_auth_ru&retpath=https%3A%2F%2Fmail.yandex.ru..."
Set oHttp1 = CreateObject("MSXML2.XMLHTTP")
oHttp1.Open "GET", str_URL, True                                                'true - асинхронный запуск
oHttp1.Send
    Do While oHttp1.ReadyState <> 4                                             'ожидание ответа
        DoEvents
    Loop

Debug.Print oHttp1.responseBody


Обратиться к нему, как к документу или ноду не получается.
...
Рейтинг: 0 / 0
18.09.2019, 10:23
    #39863172
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementById
l-evgeneОбратиться к нему, как к документу или ноду не получается.Это по поводу oHttp1.responseBody ?
Дык, это не объект, для начала, какие к нему обращения "как к документу или ноду" ? :)

Можно записать ответ сервера в свой объект-документ, и тогда обращаться к нему "как к документу"

Код: vbnet
1.
2.
3.
Set html = CreateObject("htmlfile")
html.write oHttp1.responseText
' и дальше парсить html через его DOM-модель
...
Рейтинг: 0 / 0
18.09.2019, 15:05
    #39863364
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementById
l-evgeneСергей, а не пробовали заморочиться таким вопросом.
Вот на этой операции:[src vba]
Set html = ie.Document
........
Обратиться к нему, как к документу или ноду не получается.

Я в принципе пишу сейчас что то подобное, с участием xmlhttp. Но у меня есть в проекте возможность подшаманить в случае чего на стороне вебсервера, дописать попроще в PHP.

Давайте попробуем заморочиться, вам в принципе уже подсказали, что нужно сначала структуру документа объявить как html, а не текст парсить. Но что то мне подсказывает что у вас после отправки веб запроса параметры криво передаются и переадресация с формы аутентификации яндекса не переходят на страницу списка писем. Что у вас вообще выводить debug.print?
...
Рейтинг: 0 / 0
18.09.2019, 15:30
    #39863374
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementById
Посмотрел на сайте яндекса api подключения. Там помимо передачи параметров логина и пароля еще вроде нужно токен получить. OAuth токен.
Посмотрите пока тут:
токен яндекс информация
...
Рейтинг: 0 / 0
18.09.2019, 18:36
    #39863517
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementById
В общем посмотрел возможности обработки ресурса яндекс ч/з объект xmlhttp, ie.. Думаю гиблое дело с этим связываться. Есть способ проще и без парсинга веб интерфейса яндекса при помощи объектов типа IE или xmlhhtprequest/htmlhttprequest.

Нужно использовать возможности объекта Outlook.application , использовать MAPI от майкрософта. Там не надо будет парсить теги, там можно использовать структуру объекта аутлук в коде и выводить в аксесс все что угодно.

Это не значит ,что вам обязательно нужно настраивать аутлук в качестве почтового клиента. Это значит, что вы можете в vba использовать объекты программы аутлук и юзать вход и просмотр,создание,изменение,удаление содержимого. Гораздо меньшей кровью и при помощи стандартных библиотек vba outlook , которые есть в референсах аксесса.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / getElementById / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]