6

次の 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を使用していないため、マウスクリックをシミュレートすることはできません(できたとしてもやりたくありません)。したがって、ページがレンダリングされていません。

4

3 に答える 3

8

「リンク」と呼ばれる変数にリンクの QWebElement があると仮定します (findFirst などを介して配置されます):

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

(これは Python で書かれていますが、重要なのは Javascript です。はい、これはマウス クリックをシミュレートしていますが、座標を使用しないため、レンダリングされていない QWebPage で問題なく動作します。)

于 2010-08-07T23:49:11.490 に答える
4

要素でDOM のclick()Java Script 関数を使用すると、次のようなトリックが行われます。

QWebPage * page = ...;
QWebElement el = page->mainFrame()->findFirstElement("a[href]");
el.evaluateJavaScript("this.click()"); 
于 2010-12-17T23:52:16.500 に答える
2

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);
于 2013-01-20T01:17:33.833 に答える