Russian Qt Forum
Ноябрь 22, 2024, 13:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с парсингом страницы  (Прочитано 5045 раз)
wDw
Гость
« : Октябрь 22, 2017, 09:35 »

хочу получить список  элементов,  находящихся  на загруженной  мной странице, пишу:
QWebView *view = new QWebView();
view->load(QUrl ("https://vk.com/id"+target));
QVariant result = view->page()->mainFrame()->evaluateJavaScript("document.getElementsByName(\"img\")");

в дебагер выводится QVariant(QVariantMap, QMap(("item", QVariant(QVariantMap, QMap()))("length", QVariant(double, 0))))

Картинки на странице  есть, сама страница  загружена в view,  в  чем может быть проблема?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Октябрь 22, 2017, 16:24 »

Метод load выполняется в другом потоке, т.е. если сразу после load торчит код получения result, то он не успеет выполниться
Поэтому нужно дождаться загрузки страницы, а после парсить ее

Я делал подобное тут: https://github.com/search?q=user%3Agil9red+evaluateJavaScript&type=Code&utf8=%E2%9C%93

Пример (питон):
Код
Python
# Ждем пока прогрузится страница
loop = QEventLoop()
self.view.loadFinished.connect(loop.quit)
loop.exec_()

Там тот же Qt, поэтому переписать проблем не будет


Записан

wDw
Гость
« Ответ #2 : Октябрь 23, 2017, 21:03 »

написал так:
connect(view, SIGNAL(loadFinished(bool)), &loop, SLOT(quit()));
view->load(QUrl ("https://vk.com/id"+target));
loop.exec();
при запуске  проги она ждет окончания  загрузки  страницы, и  потом  при сделать парсинг крашится и  выдает в консоль:
QVariant(QVariantMap, QMap(("item", QVariant(QVariantMap, QMap(("pbind", QVariant(QVariantMap, QMap(("pbind", QVariant(Invalid))("rbind", QVariant(Invalid))("rpbind", QVariant(QVariantMap, QMap(("pbind", QVariant(Invalid))("rbind", QVariant(QVariantMap, QMap(("pbind", QVariant(Invalid))("rbind", QVariant(Invalid))("rpbind", QVariant(Invalid)))))("rpbind", QVariant(Invalid))))))))("rbind", QVariant(Invalid))("rpbind", QVariant(Invalid)))))("length", QVariant(double, 0))))
ASSERT: "m_ref == 1" in file player\videosurfacefilter.cpp, line 72
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
Записан
wDw
Гость
« Ответ #3 : Октябрь 28, 2017, 22:19 »

проблема с  ошибками возникает если на  странице есть потоковое видео, ну да ладно.
Вопрос с  парсингом остается  актуальный.
Может  кто то привести рабочий  пример парсинга  какого либо элемента  страницы?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Октябрь 30, 2017, 14:03 »

Может  кто то привести рабочий  пример парсинга  какого либо элемента  страницы?

https://doc.qt.io/archives/qt-5.5/qwebelement.html
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.12 секунд. Запросов: 23.