2009-08-02 14 views
6

Tener un DOM del siguiente html;¿Cómo seguir un enlace en 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> 

cómo seguir un enlace (href) en QWebKit (específicamente QWebPage).

Tenga en cuenta que se trata de una imagen vinculada.
No puedo hacerlo (y no quiero, incluso si pudiera) simulando un clic del mouse ya que no uso QWebView, por lo tanto, no tengo la página procesada.

Respuesta

8

Asumiendo que tiene QWebElement del enlace en una variable llamada "enlace" (que se encuentra a través FindFirst o lo que sea):

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

(esto es en Python, pero es el Javascript que importa Y sí, esto es la simulación de un clic del ratón,. pero como no usa coordenadas, funciona bien con QWebPage sin procesar.)

+2

gracias - me encontré con este funcionó en los casos donde this.click() no hizo – hoju

+0

Para mí lo mismo, es decir, this.click() no funcionó (en algunos casos) pero esto sí. ¿Puedes explicar por qué es eso? – Albert

+0

@Albert ¿En qué navegador observas esto? –

4

Usando la función click() Java Script del DOM en el elemento hace que el truco:

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

Si tiene QWebView y no se preocupan por el desplazamiento automatización, esto puede ayudar:

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