Russian Qt Forum
Апрель 24, 2024, 14:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QWebView/JS -> автоматизация действий  (Прочитано 5440 раз)
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« : Октябрь 21, 2014, 05:26 »

Скажите пожалуйста, можно ли программно работать с элементами управления JavaScript?
В программе имеется QWebView. В браузер подгружается страница, содержащая ф-ции JavaScript. В браузере все работает, как надо - функции запускаются, выскакивают диалоги подтверждения, меняются данные в таблице по мере работы с сервисом на странице.
Мне необходимо заставить программу самостоятельно нажимать на кнопки в диалогах JS, вводить нужные строки в поля JS-форм, реагировать на изменение содержимого полей таблицы.
Подскажите пожалуйста, как это сделать? Где хранятся данные об активных формах JS окна? Как нажать на кнопку диалога программно, не трогая при этом мышь и WinAPI?
Записан

Эвтаназия - наше хобби!
Bepec
Гость
« Ответ #1 : Октябрь 21, 2014, 06:26 »

JavaScript'ом. Вставить свой javascript код и выполнить.
Записан
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #2 : Октябрь 21, 2014, 06:35 »

JavaScript'ом. Вставить свой javascript код и выполнить.

Т.е. кроме подмены кода JS на странице способов решения задачи средствами С++/Qt нет? Формы, которые появляются на экране, в иерархии объектов страницы никак себя не проявляют и не могут быть заполнены/активизированы извне?
Записан

Эвтаназия - наше хобби!
DenKor29
Гость
« Ответ #3 : Ноябрь 06, 2014, 15:30 »

JavaScript'ом. Вставить свой javascript код и выполнить.

Т.е. кроме подмены кода JS на странице способов решения задачи средствами С++/Qt нет? Формы, которые появляются на экране, в иерархии объектов страницы никак себя не проявляют и не могут быть заполнены/активизированы извне?

Почему можно использовать эмуляцию клавиатуры и мыши.

« Последнее редактирование: Ноябрь 06, 2014, 16:51 от DenKor29 » Записан
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #4 : Февраль 09, 2015, 11:36 »

Подниму тему, так как до сих пор актуально.

> Почему можно использовать эмуляцию клавиатуры и мыши.

Каким образом? Обращением к функциям Windows API?

Еще раз попробую сформулировать проблему, с которой пока не справился...
На странице сервиса, данные которого обрабатывает мое приложение на Qt, имеются функции JS (jQuerry). JS я не владею, но это не беда. Главное, я не понимаю, как подменить эти ф-ции своими. Пока обработка данных проходит в механическом режиме: пользователь открывает сервис в браузере, исходные данные копируются в программу, программа выдает результат, данные вводятся в окна JS, методом копипаста, иногда юзер просто нажимает на кнопку "да" или "нет". Моя задача - автоматизировать процесс обработки, избавив юзера от рутинной работы по копированию данных, заставить приложение открывать страницу и отсылать данные сервису без участия юзера, но при помощи этого веб-интерфейса.
Подскажите пожалуйста, каким образом в приложении можно:
1) Нажать на кнопку "Ок" или "Ок"/"Отмена" в окошке JS, которое выкидывает сервис в браузере?
2) Каким образом ввести строчные данные в окошко JS, и нажать "Ок"?
3) На некоторых страницах есть кнопки, которые просто необходимо нажимать (на автомате) - например, при авторизации, а также при подключении к другим сервисам. Два-три клика, только один вариант с определенного URL.
Собственно, все эти вопросы можно было бы решить, если знать, где вообще хранится информация об активных окнах JS на странице. Она есть, или она надежно спрятана?
Ну и, собственно, буду рад услышать идеи, как вообще можно решить эту задачу...
Записан

Эвтаназия - наше хобби!
Bepec
Гость
« Ответ #5 : Февраль 09, 2015, 11:46 »

Сказал один раз, повторю чтоб дошло Улыбающийся

Все кнопочки это html или скрипт. И нажатие на кнопочку тоже можно автоматизировать javascript'om.

Выполняете на страничке свой javascript который заполняет поля и плюхает на кнопочку. Ну или запускает скрипт кнопки на выполнение Улыбающийся
Записан
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #6 : Февраль 09, 2015, 11:51 »

Сказал один раз, повторю чтоб дошло Улыбающийся

Все кнопочки это html или скрипт. И нажатие на кнопочку тоже можно автоматизировать javascript'om.

Выполняете на страничке свой javascript который заполняет поля и плюхает на кнопочку. Ну или запускает скрипт кнопки на выполнение Улыбающийся

Да, я это уже читал, но пока все равно не дошло: "Выполняете на страничке свой javascript".
Во встроенный браузер (QWebView) подгружена страница сервиса. На ней нет моих функций. Где и как можно разместить свою функцию, которая будет заполнять поля и нажимать на кнопки функций, работающих на странице сервиса? Как вставить свою функцию на страницу сервиса? Если расскажете, тут же задам вопрос: как моя функция узнает, что на странице появилось "чужое" окно с кнопкой или полем для ввода?
Записан

Эвтаназия - наше хобби!
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #7 : Март 02, 2015, 07:52 »

В копилку знаний, проблема решена.
В классе QWebPage имеется 3 виртуальных метода, которые можно переопределить: javaScriptAlert, javaScriptConfirm и javaScriptPrompt.
Создав дочерний класс от QWebPage и подключив его к QWebView, мы можем избавить себя от модальных алертов JS, ...или не избавить.
Например, если в QWebView загружена страница сервиса ХХХ, сразу шлем ответ серверу. А в остальных случаях вызываем базовый метод.
Записан

Эвтаназия - наше хобби!
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 22.