E
25 января 2020 г. 13:59

Динамический парсинг сайтов QWebEngineView

QWebEngineView, QWebEnginePage

Добрый вечер!
Пытаюсь выполнить скрипт на странице, кт выдает выпадающий список, но не получается выполнить ни какой скрипт, вот код:

preview - QWebEnginView - виджет на форме, после получения сигнала(loadFinished) кторого, вызывается слот с кодом:

ui->preview->page()->runJavaScript("document.getElementsByTagName(\"javascript: _script_name_\")", [this](const QVariant& v)
    {
        if (v.toString() == "true")
        {
            qDebug() << "Exelent!";
        }
        else
        {
            qDebug() << "Error";
        }
    });

Но в дебаг выводится Error, хотя в консоли браузера данная команда хоть и не запускает скрипт, но выполняется(выводт парметры выбранного элемента)
То что я хочу сделать возможно?

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
3
E
  • 26 января 2020 г. 3:49
  • (ред.)
  • Ответ был помечен как решение.

Уже решил проблему)))

ui->preview->page()->runJavaScript("javascript: __doPostBack('...')", [this](const QVariant& v)
    {
        if (v.toString() == "true")
        {
            qDebug() << "Exelent!";
        }
        else
        {
            qDebug() << "Error";
        }
    });

Добрый день.

Вы не поняли проблему и просто скопировали то, что было в моём примере в рамках моей задачи, ожидая, что возвращаемым значением будет true .
Этот аргумент возвращает строку, в которой может быть что угодно в качестве возвращаемого значения. В рамках моей задачи возвращаемым значением было true , поэтому и провека была на true .

Напишите так и посмотрите, что там будет в качестве результата.

ui->preview->page()->runJavaScript("document.getElementsByTagName(\"javascript: _script_name_\")", [this](const QVariant& v)
{
    qDebug() << v.toString();
});

P/S/ Используйте, пожалуйста, диалог для вставки программного кода. В противном случае разметка в сообщении становится разбитой в случае некоторых конструкций.

E

Да, я не понял до конца того, как это работает, мало опыта работы с qt и QVAriant ни разу не использовал. Спасибо за помощь)

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Как стать автором?

Внесите вклад в развитие сообщества EVILEG.

Узнайте, как стать автором сайта.

Изучить
Donate

Добрый день, Дорогие Пользователи !!!

Я Евгений Легоцкой, разработчик EVILEG. И это мой хобби-проект, который помогает учиться программированию другим программистам и разработчикам

Если сайт помог вам, и вы хотите также поддержать развитие сайта, то вы можете сделать пожертвование следующими способами

PayPalYandex.Money
Timeweb

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг Timeweb
АС
26 мая 2020 г. 11:29
Артём Сун-Дун-Чан

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50баллов,
  • Очки рейтинга-4
МН
25 мая 2020 г. 11:33
Митя Нагибин

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50баллов,
  • Очки рейтинга-4
f
25 мая 2020 г. 5:05
falcon

C++ - Тест 001. Первая программа и типы данных

  • Результат:66баллов,
  • Очки рейтинга-1
Последние комментарии
28 мая 2020 г. 15:14
Евгений Легоцкой

Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце

Ну в моём примере, который в статье сработало так model->setData(model->index(1, 1), 7); Поскольку model->index(1, 0) - это индекс колонки id, которая скрыта, поэтому…
МА
28 мая 2020 г. 15:08
Михаил А

Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце

Спасибо, завтра првоерю. А model->setData(model->index(1, 0), 7); Тоже заработало?
28 мая 2020 г. 15:06
Евгений Легоцкой

Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце

Да, метод data всё-таки влиял, я переписал его так и заработало удаление QVariant TableModel::data(const QModelIndex &idx, int role) const{ if (role == Qt::BackgroundColorRole) {…
28 мая 2020 г. 14:49
Евгений Легоцкой

Django - Урок 011. Добавление комментариев на сайт с Django

Он более функциональный и его функционал объективно лучше поддерживается Django. Из первого, что приходит на ум: Это наличие полей типа Array Поддержка полей для JSON …
28 мая 2020 г. 14:42
progammist

Django - Урок 011. Добавление комментариев на сайт с Django

а в чем явное преимущество postgresql над mysql?)
Сейчас обсуждают на форуме
ИП
29 мая 2020 г. 1:55
Игорь Порошин

QTablwView + QSqlQueryModel скрыть пустой столбец

Да, понятно. В данном случае лучше использовать серверную процедуру (если такие поддерживаются), в которой будет проверяться наличие всех пустых строк у нужного столбца и вызываться соответ…
RG
28 мая 2020 г. 18:21
Rovshan Gurbanov

Сборка под старые версии Android

У меня SDK почти все версии есть, NDK есть версии 10, 17, 21. Но собирается приложение только с NDK v21 под Android версии 7.0 и выше Версия Qt у меня 5.14.2
28 мая 2020 г. 7:58
Евгений Легоцкой

Освобождение памяти QMainWindow::setCentralWidget

Да, соглашусь. Просто удаление происходит позже, а не сразу.
28 мая 2020 г. 5:43
Михаиллл

При подключении к git как указать пароль?

Нужно сделать ssh-keygen и потом полученый из файла код скопировать в ssh ключ в бикбакете
F
28 мая 2020 г. 1:42
Fidan

QML

Да, проблема ушла, спасибо.
О нас
Услуги
© EVILEG 2015-2020
Рекомендует хостинг TIMEWEB