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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QWebView + клик по кнопке  (Прочитано 7571 раз)
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.078 секунд. Запросов: 23.