У меня есть HTML в виде QByteArray
, и я хотел бы его разобрать.Почему QWebFrame опускает значительную часть моего HTML?
QWebPage webpage;
webpage.mainFrame()->setContent(html);
QWebElementCollection elements = webpage.mainFrame()->findAllElements("div");
Однако, оказывается пустым, даже если HTML имеет много <div>
с.
Если я печатаю qDebug() << webpage.mainFrame()->toHtml();
все, что я вижу, это "<html><head></head><body></body></html>"
anthough в html
есть хорошая большая страница с заголовком, телом, таблицами и содержимым.
Если я использую setHtml
вместо setContent
путем преобразования html
в QString
, я Литт немного больше, но не намного. Если я печатаю qDebug() << webpage.mainFrame()->toHtml();
, я вижу заголовок с его содержимым, но без таблиц стилей, но тело полностью опущено. Она заканчивается "...</head></html>"
Я думал, что это происходит только тогда, когда я использую 'нагрузки()', чтобы получить страницу с внешнего (веб) ресурса. Теперь он работает, если я жду сигнала 'loadFinished'. Теперь все имеет смысл, изначально «setHtml», вероятно, загружен чуть больше, чем 'setContent' из-за преобразования из' QString'. – vsz
@vsz Я изменил код: сигнал был испущен, но слот quit() был вызван синхронно, прежде чем exec() успел запустить. Соединив слот перед вызовом setContent и используя 'Qt :: QueuedConnection', вызов слота задерживается до тех пор, пока цикл не будет запущен (из-за этого я не уверен, есть ли тривиальное решение для больших и небольшое содержимое с помощью 'processEvents'). – alexisdm
Для большего размера файла отдельный поток, вероятно, будет лучшим решением, но это простое и элегантное решение теперь работает и достаточно для решения этой задачи. Спасибо за ваше время! – vsz