2009-08-02 14 views
6

Mit einem DOM des folgenden HTML;Wie folgt man einem Link in QWebKit?

Wie folgt man einem Link (href) in QWebKit (speziell QWebPage).

Bitte beachten Sie, dass es ein Bild ist, das verknüpft ist.
Ich kann es nicht tun (und ich möchte nicht einmal, wenn ich könnte), indem ich einen Mausklick simuliere, da ich QWebView nicht verwende, also habe ich die Seite nicht gerendert.

Antwort

8

Vorausgesetzt, dass Sie die Verbindung des QWebElement in einer Variablen namens "link" (das sich durch findfirst oder was auch immer) haben:

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

(Dies ist in Python, aber es ist das, was zählt Javascript Und ja, das einen Mausklick simuliert. Da es jedoch keine Koordinaten verwendet, funktioniert es gut mit einer nicht gerenderten QWebPage.)

+2

Dank - ich fand diese in Fällen gearbeitet, in denen this.click() nicht – hoju

+0

Für mich das gleiche, dh this.click() hat nicht funktioniert (in einigen Fällen), aber das tat. Kannst du erklären, warum das so ist? – Albert

+0

@Albert In welchem ​​Browser beobachten Sie das? –

4

click() Java Script Funktion mithilfe von DOM auf dem Element macht den Trick:

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

Wenn Sie QWebView haben und Sie zum Blättern Automatisation sich nicht, diese helfen können:

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