c++ - Qt:强制QWebView点击一个网络元素,即使是在窗口上不可见的元素

标签 c++ qt qtwebkit qwebview

假设我正在尝试单击 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

唯一的问题是:如果该元素在窗口中不可见,则无法单击。我的意思是,如果您必须向下滚动才能看到它,则无法单击它。我想这与几何有关,因为该元素没有显示在屏幕上,所以无法正确点击它。

有什么办法解决这个问题吗?也许有某种方法可以使窗口表现得像十亿 x 十亿像素,但看起来仍然是 200x200?

最佳答案

我认为调用 el.evaluateJavaScript("click()"); 应该有效。我说应该 工作是因为在过去我一直在成功使用带有“click”参数的QWebElement::function()。但是,此方法并未成为 QWebElement API 的一部分。我认为作者得出的结论是,在存在 QWebElement::evaluateJavaScript() 的情况下这是多余的。

我的类似问题 - How to follow a link in QWebKit? - 仍然没有答案:(
我想出了和你一样的解决方法 - Problem with evaluateJavaScript()

关于c++ - Qt:强制QWebView点击一个网络元素,即使是在窗口上不可见的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2655414/

相关文章:

c++ - 为什么此时无法引用智能指针auto_ptr?

c++ - 编写自动分配安全复制函数的正确方法以及为什么? C++

python-3.x - 如何让QWebView显示桌面通知?

javascript - PhantomJS 网页内存消耗?

qt4 - page-break-inside 在具有 rowSpan 的表格单元格中不起作用?

c++ - 我正在 Mac 上开发 GUI 应用程序。我已经使用 C++ 10 多年了。我需要切换到 Objective C 吗?

c++ - cvGet2D 替代方案

c++ - 播放视频时如何更改音频图片?

qt - 无法在 TextEdit 上突出显示

c++ - 将 Web 应用程序作为资源嵌入到 C++ Qt 可执行文件中