Название: QWebView/JS -> автоматизация действий Отправлено: PinkPanther от Октябрь 21, 2014, 05:26 Скажите пожалуйста, можно ли программно работать с элементами управления JavaScript?
В программе имеется QWebView. В браузер подгружается страница, содержащая ф-ции JavaScript. В браузере все работает, как надо - функции запускаются, выскакивают диалоги подтверждения, меняются данные в таблице по мере работы с сервисом на странице. Мне необходимо заставить программу самостоятельно нажимать на кнопки в диалогах JS, вводить нужные строки в поля JS-форм, реагировать на изменение содержимого полей таблицы. Подскажите пожалуйста, как это сделать? Где хранятся данные об активных формах JS окна? Как нажать на кнопку диалога программно, не трогая при этом мышь и WinAPI? Название: Re: QWebView/JS -> автоматизация действий Отправлено: Bepec от Октябрь 21, 2014, 06:26 JavaScript'ом. Вставить свой javascript код и выполнить.
Название: Re: QWebView/JS -> автоматизация действий Отправлено: PinkPanther от Октябрь 21, 2014, 06:35 JavaScript'ом. Вставить свой javascript код и выполнить. Т.е. кроме подмены кода JS на странице способов решения задачи средствами С++/Qt нет? Формы, которые появляются на экране, в иерархии объектов страницы никак себя не проявляют и не могут быть заполнены/активизированы извне? Название: Re: QWebView/JS -> автоматизация действий Отправлено: DenKor29 от Ноябрь 06, 2014, 15:30 JavaScript'ом. Вставить свой javascript код и выполнить. Т.е. кроме подмены кода JS на странице способов решения задачи средствами С++/Qt нет? Формы, которые появляются на экране, в иерархии объектов страницы никак себя не проявляют и не могут быть заполнены/активизированы извне? Почему можно использовать эмуляцию клавиатуры и мыши. Название: Re: QWebView/JS -> автоматизация действий Отправлено: PinkPanther от Февраль 09, 2015, 11:36 Подниму тему, так как до сих пор актуально.
> Почему можно использовать эмуляцию клавиатуры и мыши. Каким образом? Обращением к функциям Windows API? Еще раз попробую сформулировать проблему, с которой пока не справился... На странице сервиса, данные которого обрабатывает мое приложение на Qt, имеются функции JS (jQuerry). JS я не владею, но это не беда. Главное, я не понимаю, как подменить эти ф-ции своими. Пока обработка данных проходит в механическом режиме: пользователь открывает сервис в браузере, исходные данные копируются в программу, программа выдает результат, данные вводятся в окна JS, методом копипаста, иногда юзер просто нажимает на кнопку "да" или "нет". Моя задача - автоматизировать процесс обработки, избавив юзера от рутинной работы по копированию данных, заставить приложение открывать страницу и отсылать данные сервису без участия юзера, но при помощи этого веб-интерфейса. Подскажите пожалуйста, каким образом в приложении можно: 1) Нажать на кнопку "Ок" или "Ок"/"Отмена" в окошке JS, которое выкидывает сервис в браузере? 2) Каким образом ввести строчные данные в окошко JS, и нажать "Ок"? 3) На некоторых страницах есть кнопки, которые просто необходимо нажимать (на автомате) - например, при авторизации, а также при подключении к другим сервисам. Два-три клика, только один вариант с определенного URL. Собственно, все эти вопросы можно было бы решить, если знать, где вообще хранится информация об активных окнах JS на странице. Она есть, или она надежно спрятана? Ну и, собственно, буду рад услышать идеи, как вообще можно решить эту задачу... Название: Re: QWebView/JS -> автоматизация действий Отправлено: Bepec от Февраль 09, 2015, 11:46 Сказал один раз, повторю чтоб дошло :)
Все кнопочки это html или скрипт. И нажатие на кнопочку тоже можно автоматизировать javascript'om. Выполняете на страничке свой javascript который заполняет поля и плюхает на кнопочку. Ну или запускает скрипт кнопки на выполнение :) Название: Re: QWebView/JS -> автоматизация действий Отправлено: PinkPanther от Февраль 09, 2015, 11:51 Сказал один раз, повторю чтоб дошло :) Все кнопочки это html или скрипт. И нажатие на кнопочку тоже можно автоматизировать javascript'om. Выполняете на страничке свой javascript который заполняет поля и плюхает на кнопочку. Ну или запускает скрипт кнопки на выполнение :) Да, я это уже читал, но пока все равно не дошло: "Выполняете на страничке свой javascript". Во встроенный браузер (QWebView) подгружена страница сервиса. На ней нет моих функций. Где и как можно разместить свою функцию, которая будет заполнять поля и нажимать на кнопки функций, работающих на странице сервиса? Как вставить свою функцию на страницу сервиса? Если расскажете, тут же задам вопрос: как моя функция узнает, что на странице появилось "чужое" окно с кнопкой или полем для ввода? Название: [РЕШЕНО] Re: QWebView/JS -> автоматизация действий Отправлено: PinkPanther от Март 02, 2015, 07:52 В копилку знаний, проблема решена.
В классе QWebPage имеется 3 виртуальных метода, которые можно переопределить: javaScriptAlert, javaScriptConfirm и javaScriptPrompt. Создав дочерний класс от QWebPage и подключив его к QWebView, мы можем избавить себя от модальных алертов JS, ...или не избавить. Например, если в QWebView загружена страница сервиса ХХХ, сразу шлем ответ серверу. А в остальных случаях вызываем базовый метод. |