QT: Вынудите 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?

7
задан Pirate for Profit 16 April 2010 в 19:03
поделиться

1 ответ

Думаю, вызов el.evaluateJavaScript ("click ()"); должен работать. Я говорю, что должен работать, потому что в прошлом я успешно использовал QWebElement :: function () с аргументом «щелчок». Однако этот метод не стал частью QWebElement API. Думаю, авторы пришли к выводу, что наличие QWebElement :: AssessmentJavaScript () было лишним.

Мой аналогичный вопрос - Как перейти по ссылке в QWebKit? - все еще без ответа: (
Я придумал такой же обходной путь, как и вы здесь - Проблема с помощью AssessmentJavaScript ()

7
ответ дан 6 December 2019 в 14:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: