2015-12-08 2 views
0

Я работаю с QtWebKit (QWebView, QWebFrame и т. Д.), Чтобы получить данные с HTML-страницы. На странице html, в которой я работал, есть iframe. Я получаю все элементы источника страницы, кроме элементов в iframe.QWebFrame не получает элементы под iframe

Код я использовал это:

view->load(QUrl("http://admin:[email protected]")); 
... 
... 
frame = view->page()->mainFrame(); 
QWebFrame* iframe = frame->findFirstElement("body table tbody tr td div table tbody tr:nth-child(2) td:nth-child(2) iframe").webFrame(); 
qDebug()<<iframe->toHtml(); 

, когда я печать переменной IFRAME, я вижу только IFrame тегов, но не элементы внутри этого фрейма

Выход вышеуказанного кода:

.... 
.... 
<iframe width="100%" height="100%" frameborder="no" scrolling="no" noresize="noresize" src="bannar.html" id="topFrame" name="topFrame" title="topFrame"></iframe> 
.... 
.... 
<iframe width="100%" height="100%" frameborder="no" scrolling="no" noresize="noresize" src="menu_cronos.html" id="leftFrame" name="leftFrame" title="leftFrame" style="background:#000000"></iframe> 
.... 
.... 

Page Source of my HTML page

Я попробовал разные с Селекторы CSS и iframe-> оценитьJavaScript (код); функция и т.п .. но без использования. Может ли один пожалуйста, помогите мне получить данные/элементы внутри фрейма ... Thanx заранее ..

ответ

1

Смотрите эту статью: http://myprogrammingnotes.com/get-qwebframe-iframe.html

Вы можете думать, что легко получить объект QWebFrame для элемент iframe на веб-странице, поскольку QWebFrame формируется iframe/frame (http://doc.qt.io/qt-5/qwebview.html), и для получения объекта QWebFrame в iframe должна быть функция или метод. К сожалению, сейчас это не тривиальная работа. Вы не можете получить QWebFrame iframe на основе идентификатора iframe и не можете получить QWebFrame из QWebElement iframe. QWebFrame имеет функцию childFrames, которая может отображать все подкадры основного фрейма. Чтобы получить QWebFrame определенного iframe, вы должны перебрать все дочерние кадры основного фрейма и сравнить атрибуты дочерних кадров с некоторым заданным значением, чтобы выбрать ваш iframe. Например, следующий код выберет iframe, чей url содержит строку «myiframeurl»;

foreach(QWebFrame*childframe,frame->childFrames()) 
{ 
    if(childframe->url().toString().contains("myiframeurl")) 
    { 
    yourframe = childframe; 
    break; 
    } 
} 

Вы также можете выбрать QWebFrame в соответствии с его именем (QWebFrame :: frameName()). Когда вы получите QWebFrame iframe, вы можете получить все DOM-дерево QWebFrame, вызвав frame-> documentElement(). Если вы не знакомы с содержанием веб-страницы, вы можете не знать имя или URL-адрес или другие атрибуты QWebFrame. Вы можете распечатать значения этих атрибутов в итерации дочерних фреймов и угадать, какой из них вы хотите.

+0

Я пробовал это. Я получаю источник содержимого iframe, который указан в атрибуте iframe src (для примера: src = "loading.html"). Но используемая веб-страница внутренне перенаправляется и загружает другую страницу через javascript. (Например: iframe загружен hello.html) –

Смежные вопросы