如何按照QWebKit链接?(How to follow a link in QWebKit?)

2019-06-27 14:34发布

具有以下的HTML DOM;

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

如何按照QWebKit(特别QWebPage)的链接(HREF)。

请注意,这是一个链接的图像。
我不能做到这一点(我不希望即使我能)通过模拟鼠标点击,因为我不使用QWebView因此我没有网页渲染。

Answer 1:

假设你已经链接的QWebElement在一个名为“链接”变量(位于通过使用FindFirst或其他):

link.evaluateJavaScript( “VAR evObj = document.createEvent( 'MouseEvents'); evObj.initEvent( '点击',真实,TRUE); this.dispatchEvent(evObj);”)

(这是Python的,但它是重要的。是的,这是一个模拟鼠标点击JavaScript的,但由于它不使用坐标,它工作正常与非再生QWebPage。)



Answer 2:

使用DOM的click()的元素Java脚本功能,使的伎俩:

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


Answer 3:

如果你有QWebView和不关心滚动自动化,这可能会帮助:

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


文章来源: How to follow a link in QWebKit?