Labview+Google Chrome

Темы связанные с инженерными разработками, но не подходящие в другие ветки форума
rushonda
adviser
adviser
Сообщения: 200
Зарегистрирован: 26 фев 2016, 06:31
Репутация: 0
Версия LabVIEW: 18-19
Контактная информация:

Re: Labview+Google Chrome

Сообщение rushonda »

1) Если можно то VI -шку сделайте плиз.
2) А в случае кликов нет примера? В этом варианте кстати окно должно быть открыто всегда? Vision кстати стоит.
3) Где искать литературу по HTTP, а то функции описаны, а что на вход подавать непонятно в каком виде.
4) На питоне например клик по кнопкам делается вроде просто - смотришь код страницы, ищешь описание кнопки и вперед. А тут что-то очень мудрено.

Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3505
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Репутация: 0
Версия LabVIEW: 2.5 — 2020
Контактная информация:

Re: Labview+Google Chrome

Сообщение dadreamer »

rushonda писал(а):1) Если можно то VI -шку сделайте плиз.

Ок. Но не обещаю, что на 100% будет работать. У меня почему-то через раз логинилась.
2) А в случае кликов нет примера? В этом варианте кстати окно должно быть открыто всегда?

Setting Cursor Position Programmatically With LabVIEW
How Can I Programmatically Simulate A Mouse Click?
Конечно, должно быть открыто, пока выполняются клики или снятие изображения для поиска кнопки или ещё что-то, связанное с этим. Когда окно по алгоритму уже не нужно, его можно закрыть.
rushonda писал(а):3) Где искать литературу по HTTP, а то функции описаны, а что на вход подавать непонятно в каком виде.

Вам должны быть интересны только два вида запросов - GET и POST. Остальное в данной задаче не понадобится. Почитайте про эти запросы на вики или наберите в гугле - инфы достаточно. Параметры: для GET адрес сайта (сервера), для POST адрес сайта (сервера) и отсылаемый на сервер параметр (параметры) (в :labview: это одна переменная - строка - содержащая ряд параметров, разделяемых &). Для просмотра запросов, отправляемых браузером на сервер и получаемых с сервера, можно установить сниффер, например плагин для Лисы Live Http Headers или отдельный софт Fiddler или Charles. Сниффер всегда помогает в составлении верных запросов.
rushonda писал(а):4) На питоне например клик по кнопкам делается вроде просто - смотришь код страницы, ищешь описание кнопки и вперед. А тут что-то очень мудрено.

Очевидно, для Питона существует фреймворк, облегчающий задачу парсинга веб-контента. Не знаю, существуют ли подобные тулкиты под :labview: , специально не искал. Но, к примеру, в Дельфях есть аналогичные HTTP-клиенты - Indy или Synapse. Работа с ними почти ничем не отличается от того, что приходится делать в :labview: . Мне приходилось писать простенькие тулзы для конкретных сайтов. Запросы и парсинг - классика. :wink:

rushonda
adviser
adviser
Сообщения: 200
Зарегистрирован: 26 фев 2016, 06:31
Репутация: 0
Версия LabVIEW: 18-19
Контактная информация:

Re: Labview+Google Chrome

Сообщение rushonda »

Ок, спасибо. Плагин поставил.
Если окно нужно держать постоянно открытым, то лучше все-таки сделать через GET и POST.

Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3505
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Репутация: 0
Версия LabVIEW: 2.5 — 2020
Контактная информация:

Re: Labview+Google Chrome

Сообщение dadreamer »

ni_login.vi
lv2014
(17.13 КБ) 177 скачиваний

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

Код: Выделить всё

HTTP/1.1 302 Moved Temporarily

Location: http://www.ni.com/ru-ru.html

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

Код: Выделить всё

<html><head><title>302 Moved Temporarily</title></head>
<body bgcolor="#FFFFFF">
<p>This document you requested has moved temporarily.</p>
<p>It's now at <a href="http://www.ni.com/ru-ru.html">http://www.ni.com/ru-ru.html</a>.</p>
</body></html>

Вам нужно будет "отловить" этот ответ 302, чтобы точно знать, что можно дальше работать. Для большей уверенности можно зайти потом на

Код: Выделить всё

http://www.ni.com/myni/dashboard/ru/

В теле ответа будет инфа о данных юзера (ник, имя, фамилия и т.д.).

rushonda
adviser
adviser
Сообщения: 200
Зарегистрирован: 26 фев 2016, 06:31
Репутация: 0
Версия LabVIEW: 18-19
Контактная информация:

Re: Labview+Google Chrome

Сообщение rushonda »

О, спасибо.
Вроде принцип становится понятен - запрос-ответ - поиск инфы в теле ответа. Но вопросы все же остались и они кажется простые:
1) есть такой запрос как вы составили:
LoginForm:processLoginFlag=&LoginForm:email=
&LoginForm:password=
&recovery_appcode=HEADER_LOGIN&recovery_instance=US&recovery_scheduleCode=&recovery_du=http://www.ni.com/ru-ru.html&LoginForm_SUBMIT=1&javax.faces.ViewState=
&LoginForm:_idcl=LoginForm:continue
и др.
Как составлять сам запрос в POST - откуда брать инфу и в каком виде составлять?

2) ну и как составить запрос например клик по вкладке ИННОВАЦИИ и вбить строку в ПОИСК на этом сайте - в принципе вопрос аналогичен 1, но может как пример поможет быстрее разобраться. Заранее спасибо

Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3505
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Репутация: 0
Версия LabVIEW: 2.5 — 2020
Контактная информация:

Re: Labview+Google Chrome

Сообщение dadreamer »

rushonda, ответ на оба вопроса:
- открываете начальную страницу сайта, открываете окно сниффера, чистите лог (если там что-то есть), выполняете какое-то одно действие на сайте, смотрите запросы в логе сниффера, воспроизводите запрос в программе.

Все параметры берутся из сниффера. Для GET достаточно посмотреть адрес, по которому обращаться. Для POST кроме адреса нужно посмотреть передаваемые параметры. Они идут в конце запроса, после заголовков. Обычно в сниффере самый первый запрос - тот, что нужен. Дальше идёт уже подгрузка различных модулей, скриптов, шаблонов, стилей и т.п.
Вложения
2017-11-24_21-14-30.jpg

rushonda
adviser
adviser
Сообщения: 200
Зарегистрирован: 26 фев 2016, 06:31
Репутация: 0
Версия LabVIEW: 18-19
Контактная информация:

Re: Labview+Google Chrome

Сообщение rushonda »

dadreamer, вы писали про вариант с кликером + vision... можно кратко как это сделать? (как изображение считать и соответственно кликнуть?)

Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3505
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Репутация: 0
Версия LabVIEW: 2.5 — 2020
Контактная информация:

Re: Labview+Google Chrome

Сообщение dadreamer »

rushonda писал(а):dadreamer, вы писали про вариант с кликером + vision... можно кратко как это сделать? (как изображение считать и соответственно кликнуть?)

Ну, я уже в этой теме писал, что нужно снять скриншот окна браузера, найти на картинке кнопку по её изображению, навести курсор мыши на центр кнопки и сэмулировать клик. В принципе, ничего архисложного, работа на день-два. Для съёмки скриншота окна можете взять мой SubVI - Get Image By HWND. Вам потребуется найти хэндл окна (HWND). Если будете использовать отдельный браузер, то поможет функция FindWindow (рекомендую указывать также класс окна для более надёжной работы). Если же собираетесь использовать WebBrowser, то можно попробовать GetTopWindow с хэндлом основного :vi: . Далее, поиск кнопки реализуется через инструменты VDM для поиска цветного шаблона - IMAQ Match Color Pattern VI и сопутствующие :vi: (см. встроенную справку и примеры к Vision). Перемещение курсора мыши и программный клик выполняются через функции WinAPI, я уже приводил ссылки на примеры в этой теме.

rushonda
adviser
adviser
Сообщения: 200
Зарегистрирован: 26 фев 2016, 06:31
Репутация: 0
Версия LabVIEW: 18-19
Контактная информация:

Re: Labview+Google Chrome

Сообщение rushonda »

dadreamer, Остались некоторые вопросы.
1)Скрин я сделал - с библиотекой vision работал, клик мышкой тоже ясно.
2) Вам потребуется найти хэндл окна (HWND) - Get Image By HWND. - это и есть хэндл окна?
3) Отдельный браузер это только Internet Explorer?
4) рекомендую указывать также класс окна для более надёжной работы - что за класс?
5) Не очень удобно искать кнопки, не проще ли просто по координатам щелкать? (нельзя ли привязать как-то клик не к экрану а к labview-шной программе).
6) Вы ранее отвечали, что программа должна быть открыта - в свернутом режиме не получится т.е. (уточняю на всякий случай)?

Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3505
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Репутация: 0
Версия LabVIEW: 2.5 — 2020
Контактная информация:

Re: Labview+Google Chrome

Сообщение dadreamer »

rushonda писал(а):2) Вам потребуется найти хэндл окна (HWND) - Get Image By HWND. - это и есть хэндл окна?

HWND - хэндл / дескриптор окна, уникальный номер, идентифицирующий окно в данный момент времени. Наберите в гугле "HWND" для изучения "теории окон" Microsoft.

Инструмент Get Image By HWND позволяет снять скриншот окна по его хэндлу. На вход подаёте HWND, на выходе получаете картинку в виде picture или массива.
rushonda писал(а):3) Отдельный браузер это только Internet Explorer?

Нет, почему, используйте то, что понравится. Однако я бы всё же остановился на компоненте WebBrowser, так как он способен сам отдавать хэндл своего окна - свойство HWND доступно через узел свойств. Так что можно не париться с поиском окна. Останется только "сфоткать".
rushonda писал(а):4) рекомендую указывать также класс окна для более надёжной работы - что за класс?

MSDN писал(а):HWND WINAPI FindWindow(
_In_opt_ LPCTSTR lpClassName,
_In_opt_ LPCTSTR lpWindowName
);


Parameters

lpClassName [in, optional]

Type: LPCTSTR

The class name or a class atom created by a previous call to the RegisterClass or RegisterClassEx function. The atom must be in the low-order word of lpClassName; the high-order word must be zero.

If lpClassName points to a string, it specifies the window class name. The class name can be any name registered with RegisterClass or RegisterClassEx, or any of the predefined control-class names.

If lpClassName is NULL, it finds any window whose title matches the lpWindowName parameter.

Класс окна можно посмотреть с помощью утилит наподобие WinSpy++. См. Программы для работы с окнами приложений
rushonda писал(а):5) Не очень удобно искать кнопки, не проще ли просто по координатам щелкать? (нельзя ли привязать как-то клик не к экрану а к labview-шной программе).

Можете и по координатам. Но, на мой взгляд, меньше надёжность алгоритма в том плане, что координаты будут жёстко фиксированы, тогда как кнопка может быть распознана, даже если она перемещена с исходной позиции. IMAQ Match Color Pattern VI может по шаблону (изображению) кнопки найти эту кнопку на заданном изображении, где бы она ни находилась, лишь бы она была там. И "прикрутить" этот :vi: совсем несложно.
rushonda писал(а):6) Вы ранее отвечали, что программа должна быть открыта - в свернутом режиме не получится т.е. (уточняю на всякий случай)?

Сделать скрин свёрнутого окна можно (хотя и посложнее, чем развёрнутого), а вот сделать клик - увы. Хотя можно попробовать послать сообщение (SendMessage) приложению, но этот метод довольно ненадёжен, т.к. сторонние сообщения не всегда доходят до программы (много нюансов, например, программа запросто может игнорить целый диапазон сообщений или как-то иначе реагировать на них, чем вы хотели бы). Так что придётся работать именно с развёрнутым и желательно видимым окном браузера. Здесь будет весьма кстати дополнительный рабочий стол (монитор). :wink:

rushonda
adviser
adviser
Сообщения: 200
Зарегистрирован: 26 фев 2016, 06:31
Репутация: 0
Версия LabVIEW: 18-19
Контактная информация:

Re: Labview+Google Chrome

Сообщение rushonda »

dadreamer, спасибо, буду разбираться

rushonda
adviser
adviser
Сообщения: 200
Зарегистрирован: 26 фев 2016, 06:31
Репутация: 0
Версия LabVIEW: 18-19
Контактная информация:

Re: Labview+Google Chrome

Сообщение rushonda »

dadreamer, ДОБРЫЙ ДЕНЬ! никак не могу найти откуда берется последняя строка
&redirect=index.php&login=%D0%92%D1%85%D0%BE%D0%B4
в post запросе?
&redirect=index.php&login= - видно сниффером, а вот %D0%92%D1%85%D0%BE%D0%B4 - нигде не нашел, подскажите...

Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3505
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Репутация: 0
Версия LabVIEW: 2.5 — 2020
Контактная информация:

Re: Labview+Google Chrome

Сообщение dadreamer »

rushonda писал(а):никак не могу найти откуда берется последняя строка
&redirect=index.php&login=%D0%92%D1%85%D0%BE%D0%B4
в post запросе?
&redirect=index.php&login= - видно сниффером, а вот %D0%92%D1%85%D0%BE%D0%B4 - нигде не нашел, подскажите...

Ну, если декодировать %D0%92%D1%85%D0%BE%D0%B4, то получится Вход. А откуда вы эту строку получили? У меня в программе вроде такого нет. Может, можно передать пустой параметр или вовсе не передавать - проверьте.

rushonda
adviser
adviser
Сообщения: 200
Зарегистрирован: 26 фев 2016, 06:31
Репутация: 0
Версия LabVIEW: 18-19
Контактная информация:

Re: Labview+Google Chrome

Сообщение rushonda »

dadreamer, если убрать, то не работает - я так понимаю это и есть нажатие кнопки ВХОД!?
у Вас в программе как раз и есть эта строчка (на первой странице вложенная картинка)
кстати как дешифровать %D0%92%D1%85%D0%BE%D0%B4 во вход?
И все-таки как получить данную строчку в программе?

Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3505
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Репутация: 0
Версия LabVIEW: 2.5 — 2020
Контактная информация:

Re: Labview+Google Chrome

Сообщение dadreamer »

rushonda писал(а):dadreamer, если убрать, то не работает - я так понимаю это и есть нажатие кнопки ВХОД!?

Не совсем. Это php-скрипту передаётся параметр (переменная) login, содержащий(ая) значение %D0%92%D1%85%D0%BE%D0%B4, всего-то. Нажатие кнопки - это post-запрос, ничего другого в обычном html нет.
rushonda писал(а):у Вас в программе как раз и есть эта строчка (на первой странице вложенная картинка)

Понятно. Я думал, вы про сайт NI.
rushonda писал(а):кстати как дешифровать %D0%92%D1%85%D0%BE%D0%B4 во вход?

А зачем? Вообще, это URL Encode - одна из стандартных форм передачи юникод-текста. Например, на Википедии используется, да много где ещё. Ну, вбейте в гугл URL Decoder Online, много конверторов вылезет.
rushonda писал(а):И все-таки как получить данную строчку в программе?

Я всё параметры брал из сниффера. Ничего другого не использовал больше. У меня стоит Fiddler, по-моему это самый удобный сниффер. Остальное, имхо, так себе.

Ответить

Вернуться в «Общие»