2009-08-02 20 views
6

Ayant un DOM du html suivant; Comment suivre un lien (href) dans QWebKit (en particulier QWebPage).Comment suivre un lien dans QWebKit?

S'il vous plaît noter que c'est une image qui est liée.
Je ne peux pas le faire (et je ne veux pas même si je le pouvais) en simulant un clic de souris car je n'utilise pas QWebView donc je n'ai pas la page rendue.

Répondre

8

En supposant que vous avez QWebElement du lien dans une variable appelée "lien" (situé par findFirst ou autre):

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

(Ceci est en Python, mais il est le Javascript qui compte et oui, cela simule un clic de souris,. mais comme il n'utilise pas les coordonnées, il fonctionne correctement avec une QWebPage non créée.)

+2

merci - J'ai trouvé travaillé dans les cas où this.click() n'a pas – hoju

+0

Pour moi le même, c'est à dire this.click() n'a pas fonctionné (dans certains cas) mais cela a fonctionné. Pouvez-vous expliquer pourquoi c'est? – Albert

+0

@Albert Dans quel navigateur observez-vous cela? –

4

En utilisant la fonction click() Java Script DOM sur l'élément fait l'affaire:

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

Si vous avez QWebView et faites cela peut aider à se soucient pas de défilement automatisation,:

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