Russian Qt Forum

Qt => Работа с сетью => Тема начата: wDw от Октябрь 22, 2017, 09:35



Название: Проблема с парсингом страницы
Отправлено: 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,  в  чем может быть проблема?


Название: Re: Проблема с парсингом страницы
Отправлено: gil9red от Октябрь 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, поэтому переписать проблем не будет




Название: Re: Проблема с парсингом страницы
Отправлено: wDw от Октябрь 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.


Название: Re: Проблема с парсингом страницы
Отправлено: wDw от Октябрь 28, 2017, 22:19
проблема с  ошибками возникает если на  странице есть потоковое видео, ну да ладно.
Вопрос с  парсингом остается  актуальный.
Может  кто то привести рабочий  пример парсинга  какого либо элемента  страницы?


Название: Re: Проблема с парсингом страницы
Отправлено: Alex Custov от Октябрь 30, 2017, 14:03
Может  кто то привести рабочий  пример парсинга  какого либо элемента  страницы?

https://doc.qt.io/archives/qt-5.5/qwebelement.html