2009-08-02 11 views
6

Avere un DOM del seguente html;Come seguire un collegamento in 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> 

come seguire un collegamento (href) in QWebKit (in particolare QWebPage).

Si prega di notare che è un'immagine che è collegata.
Non riesco a farlo (e non voglio nemmeno se potessi) simulando un clic del mouse perché non utilizzo QWebView quindi non ho la pagina visualizzata.

risposta

8

Supponendo di avere QWebElement del collegamento in una variabile chiamata "link" (che si trova attraverso FindFirst o qualsiasi altra cosa):

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

(questo è in Python, ma è il Javascript che conta E sì, questo sta simulando un clic del mouse,. ma poiché non usa le coordinate, funziona bene con una QWebPage non restituita.)

+2

grazie - ho trovato questo ha funzionato nei casi in cui this.click() non ha fatto lo stesso – hoju

+0

, ad esempio this.click() non ha funzionato (in alcuni casi), ma questo ha fatto. Puoi spiegare perché? – Albert

+0

@Albert In quale browser viene visualizzato questo? –

4

Utilizzando la funzione click() Java Script del DOM sull'elemento rende il trucco:

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

Se avete QWebView e non si cura di scorrimento automatizzazione, questo può aiutare:

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