Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / sendmessage, отправка нажатий в браузер / 10 сообщений из 10, страница 1 из 1
03.12.2020, 11:05
    #40024165
qlewerok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sendmessage, отправка нажатий в браузер
предисловие
необходимо программно авторизоваться на сайте. при помощи selenium запускаю браузер, могу вводить логин и пароль, но сайт считает, что поля пустые и требует именно ручного ввода. решил посылать нажатия из .ехе приложения в браузер. запускаю код, навожусь на браузер. считываю по таймеру hwnd активного окна(браузера). получаю handle рабочей зоны по имени класса, взятого из spy++. посылаю туда SendMessage
Код: vbnet
1.
2.
3.
Dim hWnd As IntPtr = GetForegroundWindow()'hWnd хрома
Dim destControl As Integer = FindWindowEx(hWnd, IntPtr.Zero, "Chrome_RenderWidgetHostHWND", Nothing)
SendMessage(destControl, 256, Keys.Tab, 0)'ошибка

программа вылетает с ошибкой System.InvalidCastException: "Приведение строки "" к типу "Integer" является недопустимым."
объявления(по интернету их десятки, пробовал разные комбинации):
Код: vbnet
1.
2.
3.
Private Declare Function GetForegroundWindow Lib "user32" () As IntPtr
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As IntPtr, ByVal hWnd2 As IntPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As IntPtr
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
...
Рейтинг: 0 / 0
03.12.2020, 11:37
    #40024177
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sendmessage, отправка нажатий в браузер
По-моему ты каким-то вообще не тем путем идешь. Возможно, там на сервере какая-то защита, наподобии antifiorgery-токена, поэтому простой отправки логина и пароля недостаточно для авторизации - трейси девтулзой весь процесс "ручного" логина и смотри HTML/HTTP на тему что такое ты при программном логине упускаешь (какое-нибудь скрытое поле или кука).
...
Рейтинг: 0 / 0
03.12.2020, 11:47
    #40024181
qlewerok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sendmessage, отправка нажатий в браузер
fkthat, кучу литературы перечитал, пишут, нельзя на чистом js имитировать нажатие на клавиши. мне бы уже хоть как-то авторизоваться, пусть и с костылями через vb.net, слишком много времени на это убил. например, берем любой сайт, вот твиттер: https://mobile.twitter.com/login?lang=ru
вот код, который можно запустить в браузере.
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function getElementByXPath(path, otec) {
	return document.evaluate(path, otec, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}
function main(){
	var xxx = getElementByXPath('//html/body/div/div/div/div[2]/main/div/div/div[1]/form/div/div[1]/label/div/div[2]/div/input', document);
	xxx.value = '88005553535';
	xxx = getElementByXPath('//html/body/div/div/div/div[2]/main/div/div/div[1]/form/div/div[2]/label/div/div[2]/div/input', document);
	xxx.value = '111111';
}
main();

текстовые поля введутся, то кнопка "войти" не станет активной
...
Рейтинг: 0 / 0
03.12.2020, 11:58
    #40024182
qlewerok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sendmessage, отправка нажатий в браузер
...
Рейтинг: 0 / 0
03.12.2020, 12:26
    #40024193
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sendmessage, отправка нажатий в браузер
qlewerok
текстовые поля введутся, то кнопка "войти" не станет активной

Тебе вообще не нужно нажимать никакие клавиши - сделай просто программно HTTP запрос такой же, какой отправляется при "человеческой" авторизации.
...
Рейтинг: 0 / 0
03.12.2020, 12:33
    #40024195
qlewerok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sendmessage, отправка нажатий в браузер
fkthat,

как я узнаю, каким должен быть запрос? какие программы\средства? на примере твиттера, например
...
Рейтинг: 0 / 0
03.12.2020, 13:11
    #40024211
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sendmessage, отправка нажатий в браузер
qlewerok
как я узнаю, каким должен быть запрос? какие программы\средства? на примере твиттера, например

Браузерные DevTools (F12), или Fiddler. Там, может быть, конечно, не все просто, но, думаю, расковырять это при желании можно.
...
Рейтинг: 0 / 0
04.12.2020, 22:31
    #40024773
qlewerok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sendmessage, отправка нажатий в браузер
fkthat,

получилось, авторизация прошла, спасибо) в итоге сделал ещё проще: заставляю пользователя самого авторизоваться 1 раз. так даже лучше, нет мороки с картинками, кодами в смс и тд. после авторизации копирую его куки
Код: vbnet
1.
cooki = bot.Manage.Cookies

раскладываю этот массив на строки, беру имя и значение, запихиваю в другое окно
Код: vbnet
1.
bot2.Manage.AddCookie(cooka.Name, cooka.Value)

и после рефреша окна там проходит авторизация. минус: приходится грузить страницу, потом засовывать куку и обновлять страницу. итого страница грузится два раза, это долго( как сразу отправлять куки при обращению к сайту, я не нашёл
...
Рейтинг: 0 / 0
04.12.2020, 22:50
    #40024778
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sendmessage, отправка нажатий в браузер
qlewerok
заставляю пользователя самого авторизоваться 1 раз. так даже лучше, нет мороки с картинками, кодами в смс и тд. после авторизации копирую его куки

А, ну если это возможно, то, конечно, тогда это совсем просто.
...
Рейтинг: 0 / 0
04.12.2020, 22:55
    #40024781
qlewerok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sendmessage, отправка нажатий в браузер
fkthat,

возможно вставить куки сразу при переходе на сайт? сейчас переход выглядит так
Код: vbnet
1.
bot.Get(httpss)

затем подсовываются куки. потом
Код: vbnet
1.
bot.Refresh()

это долго
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / sendmessage, отправка нажатий в браузер / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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