QWebFrame没有获取iframe下的元素

时间:2015-12-08 14:09:31

标签: c++ qt qtwebkit

我正在使用QtWebKit(QWebView,QWebFrame等...)来检索HTML页面中的数据。我工作的html页面有 iframe 。我获取了除iframe下的元素之外的页面源的所有元素。

我使用的代码是:

view->load(QUrl("http://admin:admin@172.16.5.197"));
...
...
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中的元素

上述代码的输出为:

....
....
<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-&gt; evaluateJavaScript(代码); 功能等..但没用。 任何人都可以帮我在iframe中获取数据/元素... Thanx提前..

2 个答案:

答案 0 :(得分:1)

看到这篇文章: http://myprogrammingnotes.com/get-qwebframe-iframe.html

您可能认为在网页中获取iframe元素的QWebFrame对象很容易,因为QWebFrame由iframe / frame(http://doc.qt.io/qt-5/qwebview.html)构成,并且必须有一个函数或方法来获取QWebFrame对象iframe的不幸的是,目前这不是一项微不足道的工作。您无法根据iframe的ID获取iframe的QWebFrame,也无法从iframe的QWebElement获取QWebFrame。 QWebFrame有一个函数childFrames,它可以列出主框架的所有子框架。要获取特定iframe的QWebFrame,您应该迭代主框架的所有子框架,并将子框架的属性与某个指定值进行比较,以选择iframe。例如,以下代码将挑选出其网址包含字符串“myiframeurl”的iframe;

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

您还可以根据其名称(QWebFrame :: frameName())选择QWebFrame。获得iframe的QWebFrame后,您可以通过调用frame-&gt; documentElement()来获取QWebFrame的整个DOM树。如果您不熟悉网页的内容,则可能不知道QWebFrame的名称或网址或其他属性。您可以在子帧的迭代中打印这些属性的值,并猜测哪一个是您想要的那个。

答案 1 :(得分:0)

如文章http://myprogrammingnotes.com/get-qwebframe-iframe.html所述, 你无法使用iframe.webFrame()获得QWebElement。你得到的实际上是主框架,而不是iframe本身。