Проблема с залогиниванием

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
akm-2005
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 04.03.2016 (Пт) 11:05

Проблема с залогиниванием

Сообщение akm-2005 » 22.07.2019 (Пн) 18:40

Добрый день.
Помогите пжст с программным залогиниванием (на VB6) на https://portal5.cbr.ru/account/login. Открываю страницу в WebBrowser-е, вписываю свои логин и пароль, нажимаю кнопку. Раньше работало, недавно разработчики поменяли структуру страницы, и, исправив код, стал получать ошибку, с которой сам не могу справиться.
Код: Выделить всё
' ...загружаю страницу в WebBroswer, получаю страницу в HTMLdoc (HTMLDocument)

' Получаю элемент логина и вписываю в него логин
Set e1 = HTMLdoc.getElementsByClassName("form-control")(0)
e1.Value = sLogin
           
' Получаю элемент пароля и вписываю в него пароль
Set e1 = HTMLdoc.getElementsByClassName("form-control")(1)
e1.Value = sPass

' Получаю кнопку "Авторизоваться" и нажимаю на нее
Set e1 = HTMLdoc.getElementsByClassName("btn btn-br-primary mr-0 mt-2 mb-3")
e1.Click


Простите, что не пишу весь код. Строки с загрузкой страницы, получением элементов вроде бы не проблемные, поля находятся успешно. На нескольких других ресурсах подобный алгоритм работает без проблем.

Отслеживая поведение WebBrowser-а, вижу, что после вписывания мной логина и пароля, в момент нажатия кнопки данные о логине и пароле пропадают из полей, будто бы они и не были введены в Value, и страница реагирует надписями "Необходимо ввести..." под текстовыми полями...
Возможно, хранение вписанных в текстовые поля логина и пароля осуществляется не так, как было раньше, и кнопка/форма не видят их в нужных им аттрибутах...
Просьба помочь с залогиниванием: подскажите пжст, как исправить код (можно хотя бы направление), чтобы при нажатии на кнопку (или вызове submit) данные из полей логина и пароля не игнорировались (для тестирования не требуются конкретные логин-пароль). Если что-то неправильно описал, готов исправиться.
Последний раз редактировалось Хакер 26.07.2019 (Пт) 5:18, всего редактировалось 1 раз.
Причина: Оформление кода

akm-2005
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 04.03.2016 (Пт) 11:05

Re: Проблема с залогиниванием

Сообщение akm-2005 » 23.07.2019 (Вт) 10:39

Обратил внимание, что если в WebBrowser ввести в поля логина и пароля текст вручную, то программное кликанье по кнопке дает результат (текст логина и пароля "хватается" формой), если же эти тексты вписывать программно, то - "не хватаются".
Попробовал сравнить все свойства поля логина, заполненного вручную и программно - они одинаковые...
Возможно, мне просто недоступны привязанные к элементам обработчики, что-то делающие с текстом... например, куда-то его вписывающие...
Помогите пжст разобраться.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14147
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Проблема с залогиниванием

Сообщение alibek » 23.07.2019 (Вт) 16:37

Для начала, на указанном ресурсе в форме нет элементов с классом form-control.
А еще там используется какой-то фреймворк, в котором у меня нет желания разбираться и который самостоятельно обрабатывает события формы.
И не исключено, что он использует не атрибут value, а атрибут data для ввода и отправки данных.
Lasciate ogni speranza, voi ch'entrate.

akm-2005
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 04.03.2016 (Пт) 11:05

Re: Проблема с залогиниванием

Сообщение akm-2005 » 24.07.2019 (Ср) 8:18

Спасибо за ответ.
alibek писал(а):Для начала, на указанном ресурсе в форме нет элементов с классом form-control.

Глядя в Инспекторе файрфокса, я элементы этого класса вижу (но не вижу, если смотрю "исходный код страницы"):
Изображение
alibek писал(а):И не исключено, что он использует не атрибут value, а атрибут data для ввода и отправки данных.

В среде VB6 сравнивал свойства input-поля логина при ручном и программном вводах текста - не нашел отличий.
Пытался вводить текст в разные атрибуты: "data-v-0109b3c1", "data", ... - нет результата...
alibek писал(а):А еще там используется какой-то фреймворк, в котором у меня нет желания разбираться и который самостоятельно обрабатывает события формы.

Если это не слишком затруднит, подскажите пжст, куда копать, чтобы понять - в чем отличие при ручном вводе текста в эти поля от программного ввода.
Хочу попробовать эмулировать/имитировать ручной ввод, чтобы программное нажатие на кнопку отрабатывало как надо.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14147
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Проблема с залогиниванием

Сообщение alibek » 24.07.2019 (Ср) 9:26

akm-2005 писал(а):Глядя в Инспекторе файрфокса, я элементы этого класса вижу (но не вижу, если смотрю "исходный код страницы"):

Потому что страница формируется динамически.
Более правильным селектором будет "form.form-auth input.form-control".

alibek писал(а):Пытался вводить текст в разные атрибуты: "data-v-0109b3c1", "data", ... - нет результата...

Это фреймворк, не нужно хардкодить. Ключ наверняка при каждой загрузке страницы разный.

alibek писал(а):Если это не слишком затруднит, подскажите пжст, куда копать, чтобы понять - в чем отличие при ручном вводе текста в эти поля от программного ввода.

Начинать отсюда: http://nuxtjs.org/
Lasciate ogni speranza, voi ch'entrate.

akm-2005
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 04.03.2016 (Пт) 11:05

Re: Проблема с залогиниванием

Сообщение akm-2005 » 25.07.2019 (Чт) 16:15

alibek писал(а):Потому что страница формируется динамически.
Правильно ли я понимаю, что остановившись в программе после загрузки страницы в WB и прочитав (средствами VB6) все свойства элемента на странице, я не должен им доверять из-за фреймворка?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16212
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Проблема с залогиниванием

Сообщение Хакер » 26.07.2019 (Пт) 5:18

akm-2005, тебе стоит узнать про теги [code] и [icode].
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

akm-2005
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 04.03.2016 (Пт) 11:05

Re: Проблема с залогиниванием

Сообщение akm-2005 » 26.07.2019 (Пт) 9:19

Виноват. Исправлюсь.

По теме подскажите пжст.

Постарался понять, как я могу, видя в VB6 HTML-структуру страницы, открытой в WB, созданной фреймворком динамически, имитировать ручной ввод текста в поля логина и пароля (после этого программное нажатие на кнопку отправки - работает). Мне представляется, что при ручном вводе текста (в отличие от программного) фреймворк производит обработку введенного текста более серьезным образом, чем просто вписыванием в одно из полей (value) инпут-поля. Но понять тему настолько, чтобы определить - где это посмотреть, как посмотреть (и как потом это можно использовать внутри VB6) - не смог.

Почитал viewtopic.php?f=56&t=40300. Подумал об использовании WinHttpRequest для получения HTML-кода страницы (вдруг он отличается от того, что я вижу с помощью WB в VB6 или в инспекторе FireFox-а), но для этого мне нужно понять - как я могу увидеть - что происходит при ручном вводе текста в логин. Подскажите пжст - что происходит или (если это слишком альтруистичная/неблагодарная работа) как я могу это увидеть обычными средствами (FF).

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16212
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Проблема с залогиниванием

Сообщение Хакер » 26.07.2019 (Пт) 9:24

В WB-контроле оно работает, если делать вручную? Как вариант крайней мере, можно имитировать ручной ввод посылом оконных сообщений окну WB-контрола, а не манипулированием через DOM-модель документа.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14147
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Проблема с залогиниванием

Сообщение alibek » 26.07.2019 (Пт) 9:27

akm-2005 писал(а):Постарался понять, как я могу, видя в VB6 HTML-структуру страницы, открытой в WB, созданной фреймворком динамически, имитировать ручной ввод текста в поля логина и пароля (после этого программное нажатие на кнопку отправки - работает). Мне представляется, что при ручном вводе текста (в отличие от программного) фреймворк производит обработку введенного текста более серьезным образом, чем просто вписыванием в одно из полей (value) инпут-поля. Но понять тему настолько, чтобы определить - где это посмотреть, как посмотреть (и как потом это можно использовать внутри VB6) - не смог.

Мое предположение о том, что используется не только value — это просто предположение. Чтобы знать точно, нужно потратить время и проверить.
Но если хочется пойти этим путем, то нужно понимать, что у элемента на странице есть ряд событий, на которые могут быть назначены обработчики.
При ручном вводе происходит целая цепочка событий (точный их список и последовательность нужно уточнять в документации): focus, keydown, keypress, keyup, input, change. Обработчики этих событий будут назначены на соответствующие атрибуты on<event>. Нужно эмулировать всю эту цепочку, вызывая назначенные обработчики.
По-моему проще будет изучить фреймворк и работать с ним штатным образом.
Lasciate ogni speranza, voi ch'entrate.

bon818
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 230
Зарегистрирован: 29.08.2009 (Сб) 4:49
Откуда: Ташкент

Re: Проблема с залогиниванием

Сообщение bon818 » 27.07.2019 (Сб) 0:47

Бедные браузеры.
Там JS файлы размером в 5-7 мб.
Хотел открыть посмотреть один "vendor.js - 5мб", не смог, все что есть редакторы зависают, приходится убивать.
В файле есть ф-я:
Код: Выделить всё
t._withTask = function() {
  Xt = !0;
  var e = t.apply(null, arguments);
  return Xt = !1, e
}

на контролах ввода есть два события (см картинку) , обрабатываются этой ф-ей.
Похоже, если в t._withTask = предать True, то отправка сработает.
Вложения
2019-07-27_022537.png
инспектор FireFox-а
2019-07-27_022537.png (21.23 Кб) Просмотров: 238

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2033
Зарегистрирован: 25.11.2002 (Пн) 20:03

Re: Проблема с залогиниванием

Сообщение ALX_2002 » 29.07.2019 (Пн) 13:39

akm-2005, доброго дня. Спешу поделиться информацией.

1) Существует такой документик "ЕСОД-4Р. Руководство Оператора ЛК.DOCX", в нём в (почти в конце документа) в приложении "Д" есть описание протокола обмена Rest сервиса, дабы не заморачиваться с костылями автоматизации работы с сайтом.

2) Я тоже не сразу наткнулся на эту документацию, поэтому реализовал всю работу с сайтом через обычный обмен JSON запросами, так как их достаточно для работы с сайтом. Это спасает от загрузки ненужного тела HTML страницы, изображений, скриптов и т.п., а соответственно ещё и от парсинга кода страницы, который к тому же может сильно меняться при изменении дизайна сайта. Для расшифровки пришедших ДСП файлов можно использовать функционал Browser плагина CryptoPRO. Если надо, могу поделиться примерами. :wink:

P.S Так как форум не даёт загрузить больше 2 МиБ, то залил документалку на файлообменник - ссылка
Последний раз редактировалось ALX_2002 30.07.2019 (Вт) 15:30, всего редактировалось 1 раз.

akm-2005
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 04.03.2016 (Пт) 11:05

Re: Проблема с залогиниванием

Сообщение akm-2005 » 30.07.2019 (Вт) 14:21

Спасибо всем за советы и внимание!
Как и планировал попробовать:
akm-2005 писал(а):Хочу попробовать эмулировать/имитировать ручной ввод, чтобы программное нажатие на кнопку отрабатывало как надо.
, услышав Хакера:
Хакер писал(а):В WB-контроле оно работает, если делать вручную? Как вариант крайней мере, можно имитировать ручной ввод посылом оконных сообщений окну WB-контрола, а не манипулированием через DOM-модель документа.
, вспомнил, что такое я умею... :D

Посылом WM_LBUTTONDOWN и WM_LBUTTONUP (по подсказке Spy) удается имитировать вход в текстовые поля логина и пароля. После этого посылом WM_CHAR имитируется ввод с клавиатуры. Нажатие кнопки, как упоминал, не было проблемой.

Еще раз спасибо. Тему можно закрывать.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2033
Зарегистрирован: 25.11.2002 (Пн) 20:03

Re: Проблема с залогиниванием

Сообщение ALX_2002 » 30.07.2019 (Вт) 15:31

akm-2005, Вы точно не спешите с выводами ? ) Уверены, что работа с сайтом через GUI Вам так необходима ?

akm-2005
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 04.03.2016 (Пт) 11:05

Re: Проблема с залогиниванием

Сообщение akm-2005 » 31.07.2019 (Ср) 8:27

ALX_2002, могу и ошибаться, но мне показалось, что все написанные мной "выводы" - факты (палнировал, услышал, вспомнил, удается, имитируется). Задачу, нужную мне для работы ежедневно (ежечасно), я решил (спасибо всем) - период, когда что-то нужно было делать вручную, закончился (и он - мешал).
Если есть желание не закрывать тему и обсудить более подробно иные способы решения проблемы - я не против, конечно. :)

Я не считаю использованный способ входа в свой личный кабинет на сайте самым оптимальным, потому что мне не с чем сравнить - я не реализовал ни один другой: работа с фреймворком для меня сложна и я не уверен в её рентабельности, разбирать js-код - то же, использовать другие встроенные браузеры мне не хочется из-за желания оставить общность подхода к сёрфингу, протокол обмена Rest сервиса - прочитал, но имхо он мне не поможет (мне нужен вход в ЛК чтобы получить там то, что не дают описанные функции). Но пока этот способ ежечасно работает и нареканий не вызывает.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 4

    TopList