Как перейти по ссылке в QWebKit? - PullRequest
6 голосов
/ 03 августа 2009

Имея DOM следующего html;

<a href="?op=order">
<img class="img_button" src="picture.gif"
  onMouseOver="this.src='some.gif';"
  onMouseOut="this.src='some_other.gif';"
  alt="" border="0">
</a>

как перейти по ссылке (href) в QWebKit (в частности, QWebPage).

Обратите внимание, что это изображение, которое связано.
Я не могу сделать это (и не хочу, даже если бы мог), имитируя щелчок мыши, поскольку я не использую QWebView, поэтому страница не отображается.

Ответы [ 3 ]

8 голосов
/ 08 августа 2010

Предполагая, что у вас есть ссылка QWebElement в переменной с именем "link" (расположена через findFirst или что-то еще):

link.evaluateJavaScript ("var evObj = document.createEvent ('MouseEvents'); evObj.initEvent ('click', true, true); this.dispatchEvent (evObj);")

(Это на Python, но важен Javascript. И да, это симуляция щелчка мышью, но, поскольку он не использует координаты, он отлично работает с неотрисованным QWebPage.)

4 голосов
/ 18 декабря 2010

Использование DOM-функции click() Java Script для элемента делает хитрость:

QWebPage * page = ...;
QWebElement el = page->mainFrame()->findFirstElement("a[href]");
el.evaluateJavaScript("this.click()"); 
2 голосов
/ 20 января 2013

Если у вас есть QWebView и вы не заботитесь об автоматизации прокрутки, это может помочь:

const QWebElement &element=__your_element__;
QWebView *view =__your_view__;
QWebFrame *const frame=view->page()->mainFrame();
QPoint const elemPos=element.geometry().center();
frame->setScrollPosition(elemPos);
QPoint const scrollPos=frame->scrollPosition();

QMouseEvent * const impossibleMousePress = new QMouseEvent(QEvent::MouseButtonPress,elemPos-scrollPos,Qt::LeftButton,Qt::LeftButton,Qt::NoModifier);
QMouseEvent * const impossibleMouseRelease = new QMouseEvent(QEvent::MouseButtonRelease,elemPos-scrollPos,Qt::LeftButton,Qt::LeftButton,Qt::NoModifier);
QApplication::postEvent(view,impossibleMousePress);
QApplication::postEvent(view,impossibleMouseRelease);
...