Russian Qt Forum
Ноябрь 23, 2024, 00:33
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
QWebView/JS -> автоматизация действий
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QWebView/JS -> автоматизация действий (Прочитано 5824 раз)
PinkPanther
Самовар
Offline
Сообщений: 169
QWebView/JS -> автоматизация действий
«
:
Октябрь 21, 2014, 05:26 »
Скажите пожалуйста, можно ли программно работать с элементами управления JavaScript?
В программе имеется QWebView. В браузер подгружается страница, содержащая ф-ции JavaScript. В браузере все работает, как надо - функции запускаются, выскакивают диалоги подтверждения, меняются данные в таблице по мере работы с сервисом на странице.
Мне необходимо заставить программу самостоятельно нажимать на кнопки в диалогах JS, вводить нужные строки в поля JS-форм, реагировать на изменение содержимого полей таблицы.
Подскажите пожалуйста, как это сделать? Где хранятся данные об активных формах JS окна? Как нажать на кнопку диалога программно, не трогая при этом мышь и WinAPI?
Записан
Эвтаназия - наше хобби!
Bepec
Гость
Re: QWebView/JS -> автоматизация действий
«
Ответ #1 :
Октябрь 21, 2014, 06:26 »
JavaScript'ом. Вставить свой javascript код и выполнить.
Записан
PinkPanther
Самовар
Offline
Сообщений: 169
Re: QWebView/JS -> автоматизация действий
«
Ответ #2 :
Октябрь 21, 2014, 06:35 »
Цитата: Bepec от Октябрь 21, 2014, 06:26
JavaScript'ом. Вставить свой javascript код и выполнить.
Т.е. кроме подмены кода JS на странице способов решения задачи средствами С++/Qt нет? Формы, которые появляются на экране, в иерархии объектов страницы никак себя не проявляют и не могут быть заполнены/активизированы извне?
Записан
Эвтаназия - наше хобби!
DenKor29
Гость
Re: QWebView/JS -> автоматизация действий
«
Ответ #3 :
Ноябрь 06, 2014, 15:30 »
Цитата: PinkPanther от Октябрь 21, 2014, 06:35
Цитата: Bepec от Октябрь 21, 2014, 06:26
JavaScript'ом. Вставить свой javascript код и выполнить.
Т.е. кроме подмены кода JS на странице способов решения задачи средствами С++/Qt нет? Формы, которые появляются на экране, в иерархии объектов страницы никак себя не проявляют и не могут быть заполнены/активизированы извне?
Почему можно использовать эмуляцию клавиатуры и мыши.
«
Последнее редактирование: Ноябрь 06, 2014, 16:51 от DenKor29
»
Записан
PinkPanther
Самовар
Offline
Сообщений: 169
Re: QWebView/JS -> автоматизация действий
«
Ответ #4 :
Февраль 09, 2015, 11:36 »
Подниму тему, так как до сих пор актуально.
> Почему можно использовать эмуляцию клавиатуры и мыши.
Каким образом? Обращением к функциям Windows API?
Еще раз попробую сформулировать проблему, с которой пока не справился...
На странице сервиса, данные которого обрабатывает мое приложение на Qt, имеются функции JS (jQuerry). JS я не владею, но это не беда. Главное, я не понимаю, как подменить эти ф-ции своими. Пока обработка данных проходит в механическом режиме: пользователь открывает сервис в браузере, исходные данные копируются в программу, программа выдает результат, данные вводятся в окна JS, методом копипаста, иногда юзер просто нажимает на кнопку "да" или "нет". Моя задача - автоматизировать процесс обработки, избавив юзера от рутинной работы по копированию данных, заставить приложение открывать страницу и отсылать данные сервису без участия юзера, но при помощи этого веб-интерфейса.
Подскажите пожалуйста, каким образом в приложении можно:
1) Нажать на кнопку "Ок" или "Ок"/"Отмена" в окошке JS, которое выкидывает сервис в браузере?
2) Каким образом ввести строчные данные в окошко JS, и нажать "Ок"?
3) На некоторых страницах есть кнопки, которые просто необходимо нажимать (на автомате) - например, при авторизации, а также при подключении к другим сервисам. Два-три клика, только один вариант с определенного URL.
Собственно, все эти вопросы можно было бы решить, если знать, где вообще хранится информация об активных окнах JS на странице. Она есть, или она надежно спрятана?
Ну и, собственно, буду рад услышать идеи, как вообще можно решить эту задачу...
Записан
Эвтаназия - наше хобби!
Bepec
Гость
Re: QWebView/JS -> автоматизация действий
«
Ответ #5 :
Февраль 09, 2015, 11:46 »
Сказал один раз, повторю чтоб дошло
Все кнопочки это html или скрипт. И нажатие на кнопочку тоже можно автоматизировать javascript'om.
Выполняете на страничке свой javascript который заполняет поля и плюхает на кнопочку. Ну или запускает скрипт кнопки на выполнение
Записан
PinkPanther
Самовар
Offline
Сообщений: 169
Re: QWebView/JS -> автоматизация действий
«
Ответ #6 :
Февраль 09, 2015, 11:51 »
Цитата: Bepec от Февраль 09, 2015, 11:46
Сказал один раз, повторю чтоб дошло
Все кнопочки это html или скрипт. И нажатие на кнопочку тоже можно автоматизировать javascript'om.
Выполняете на страничке свой javascript который заполняет поля и плюхает на кнопочку. Ну или запускает скрипт кнопки на выполнение
Да, я это уже читал, но пока все равно не дошло: "Выполняете на страничке свой javascript".
Во встроенный браузер (QWebView) подгружена страница сервиса. На ней нет моих функций. Где и как можно разместить свою функцию, которая будет заполнять поля и нажимать на кнопки функций, работающих на странице сервиса? Как вставить свою функцию на страницу сервиса? Если расскажете, тут же задам вопрос: как моя функция узнает, что на странице появилось "чужое" окно с кнопкой или полем для ввода?
Записан
Эвтаназия - наше хобби!
PinkPanther
Самовар
Offline
Сообщений: 169
[РЕШЕНО] Re: QWebView/JS -> автоматизация действий
«
Ответ #7 :
Март 02, 2015, 07:52 »
В копилку знаний, проблема решена.
В классе QWebPage имеется 3 виртуальных метода, которые можно переопределить: javaScriptAlert, javaScriptConfirm и javaScriptPrompt.
Создав дочерний класс от QWebPage и подключив его к QWebView, мы можем избавить себя от модальных алертов JS, ...или не избавить.
Например, если в QWebView загружена страница сервиса ХХХ, сразу шлем ответ серверу. А в остальных случаях вызываем базовый метод.
Записан
Эвтаназия - наше хобби!
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...