したがって、QWebViewのリンクをクリックしようとしているとしましょう。これが、私が持っているものです。
// extending QWebView
void MyWebView::click(const QString &selectorQuery)
{
QWebElement el = this->page()->mainFrame()->findFirstElement(selectorQuery);
if (!el)
return;
el.setFocus();
QMouseEvent pressEvent(QMouseEvent::MouseButtonPress, el.geometry().center(),
Qt::MouseButton::LeftButton, Qt::LeftButton, Qt::NoModifier);
QCoreApplication::sendEvent(this, &pressEvent);
QMouseEvent releaseEvent(QMouseEvent::MouseButtonRelease,
el.geometry().center(), Qt::MouseButton::LeftButton,
Qt::LeftButton, Qt::NoModifier);
QCoreApplication::sendEvent(this, &releaseEvent);
}
そして、あなたはそれをそのように呼びます:
myWebView->click("a[href]"); // will click first link on page
myWebView->click("input[type=submit]"); // submits a form
唯一の問題は、要素がウィンドウに表示されていない場合、クリックできないことです。 つまり、下にスクロールして表示する必要がある場合は、クリックできません。要素が画面に表示されないため、これはジオメトリに関係していると思います。要素を右クリックするための計算を行うことはできません。
これを回避するためのアイデアはありますか?たぶん、ウィンドウを10億x 10億ピクセルのように動作させながら、200x200に見えるようにする方法はありますか?