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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QWebView + клик по кнопке  (Прочитано 7471 раз)
Squarc
Гость
« : Июль 14, 2010, 23:23 »

Здравствуйте! Я новичок в Qt программировании. Вот решил повозиться с QWebView компонентом. Столкнулся с проблемой, что для автоматизации действия надо нажать на определенную кнопку на странице, только вот не знаю как это сделать. Как я понял, положение кнопки можно взять как
Код:
QWebElement element;
...element.geometry().center()
только вот как кликнуть на найденную кнопку?
Записан
redcouch
Гость
« Ответ #1 : Июль 15, 2010, 21:17 »

Интересует почти такая же проблема. Правда, кроме кнопки нужно еще заполнить две строчки и поставить галочку.
Записан
crackedmind
Гость
« Ответ #2 : Июль 15, 2010, 21:55 »

я конечно понимаю, что это не оригинально, но можно выполнить JavaScript Подмигивающий
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #3 : Июль 15, 2010, 22:03 »

да, либо evaluateJavaScript(), либо делать клик в пределах формы имея координаты для клика, которые могут быть в "составе кнопки" (не пробовал так, но наверное есть такая возможность). Хотя оба варианта прогорят, если изменится вёрстка страницы (первый может и нет, если кнопка берётся по id элемента, а значение id не изменён к примеру), тут уж ничего не поделаешь.

п.с. эко народ на роботов/ботов для автоматизации работы с сайтами потянуло
« Последнее редактирование: Июль 15, 2010, 22:06 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
Squarc
Гость
« Ответ #4 : Июль 15, 2010, 23:22 »

вот именно, что бот... страничка на ПХП... скриптов никаких нет на ней... какна кнопать кликнуть даже не представляю. Подскажите как кликнуть то на виджет
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #5 : Июль 16, 2010, 00:14 »

вот именно, что бот... страничка на ПХП... скриптов никаких нет на ней... какна кнопать кликнуть даже не представляю. Подскажите как кликнуть то на виджет
сказал же, evaluateJavaScript() используй. поставить его надо в слоте на сигнал loadFinished() вебвьюхи например.

QVariant QWebFrame::evaluateJavaScript ( const QString & scriptSource )   [slot]
Evaluates the JavaScript defined by scriptSource using this frame as context and returns the result of the last executed statement.

А если не знаешь яваскрипт, то дело плохо, смысл даже без этих знаний лезть в эту нишу?

страничка на ПХП...
страничка не на php, а на html и т.п., так как php это серверный, а не клиентский скрипт.

скриптов никаких нет на ней
они там и не нужны, это тебе надо внедрить на страницу скрипт через evaluateJavaScript().

Псевдокод:
Код
C++ (Qt)
const QString& jScript = "document.getElementById('myButtonsId').click()";
QWebView->QWebFrame->evaluateJavaScript(jScript);
 
Тут яваскрипт берёт кнопку по её id и кликает, можно также брать по имени или индексу в коллекции кнопок, смотря чем удобнее глядя на исходник страницы.
« Последнее редактирование: Июль 16, 2010, 01:10 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
Squarc
Гость
« Ответ #6 : Июль 16, 2010, 16:12 »

спасибо за ответ Подмигивающий надо же на чем-то учиться...
Записан
Nolorop
Гость
« Ответ #7 : Ноябрь 27, 2010, 20:52 »

Доброго вечера.
Такая же проблема: нужно кликнуть по кнопке, но предложенный вариант не устраивает по причине того, что координаты клика относительно кнопки затем передаются в POST-запросе. Это видно в FireBug'e, правда пока не нашел каким макаром они получаются, ибо не знаю javascript. Мне важно полностью эмулировать поведение пользователя-мышатника.
Пробовал такое решение: http://stackoverflow.com/questions/2655414/qt-force-qwebview-to-click-on-a-web-element-even-one-not-visible-on-the-window, но кнопка по которой кликаю видима на экране не всегда, поэтому такой вариант тоже не устраивает.
Итак, нужна максимально точная эмуляция клика по элементу, которого сейчас нет на экране.
« Последнее редактирование: Ноябрь 27, 2010, 20:55 от Nolorop » Записан
Nolorop
Гость
« Ответ #8 : Ноябрь 27, 2010, 23:28 »

Разобрался, делается джаваскриптом:
https://developer.mozilla.org/en/DOM/document.createEvent
https://developer.mozilla.org/en/DOM/event.initMouseEvent
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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