2009-08-02 15 views
6

Posiadanie DOM następującego html;Jak postępować zgodnie z linkiem w QWebKit?

<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> 

Jak postępować zgodnie z linkiem (href) w QWebKit (w szczególności QWebPage).

Proszę zauważyć, że to połączone zdjęcie.
Nie mogę tego zrobić (i nie chcę nawet, gdybym mógł), symulując kliknięcie myszą, ponieważ nie używam QWebView, więc nie mam renderowanej strony.

Odpowiedz

8

Zakładając masz link za QWebElement w zmiennej o nazwie "link" (znajduje się za FindFirst lub cokolwiek):

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

(jest to w Pythonie, ale to się liczy JavaScript I tak, to jest symulowanie kliknięcia myszy. ale ponieważ nie używa współrzędnych, działa dobrze z nieodebraną QWebPage.)

+2

Dzięki - Znalazłem to działało w przypadkach, w których this.click() nie było – hoju

+0

Dla mnie to samo, tj. this.click() nie działało (w niektórych przypadkach), ale tak się stało. Czy możesz wyjaśnić, dlaczego tak jest? – Albert

+0

@ Albert W jakiej przeglądarce to obserwujesz? –

4

Korzystanie z funkcji DOM za click() Java Script na elemencie sprawia trick:

QWebPage * page = ...; 
QWebElement el = page->mainFrame()->findFirstElement("a[href]"); 
el.evaluateJavaScript("this.click()"); 
2

Jeśli masz QWebView i nie dbają o przewijanie automatyzację, to może pomóc:

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);