【问题标题】:QWebFrame not getting elements under iframeQWebFrame 没有在 iframe 下获取元素
【发布时间】:2015-12-08 14:09:30
【问题描述】:

我正在使用 QtWebKit(QWebView,QWebFrame etc...) 从 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->evaluateJavaScript(code); 功能等..但没有用。 谁能帮我在 iframe 中获取数据/元素... 提前谢谢..

【问题讨论】:

    标签: c++ qt qtwebkit


    【解决方案1】:

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

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

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

    你也可以根据名字选择QWebFrame(QWebFrame::frameName())。一旦获得了 iframe 的 QWebFrame,就可以通过调用 frame->documentElement() 获得 QWebFrame 的整个 DOM 树。如果您不熟悉网页的内容,您可能不知道 QWebFrame 的名称或 url 或其他属性。您可以在子帧的迭代中打印出这些属性的值,并猜测哪一个是您想要的。

    【讨论】:

    • 我试过这个。我得到了 iframe src 属性中指定的 iframe 内容的来源(例如:src="loading.html")。但是我使用的网页是内部重定向的,并通过 javascript 加载了另一个页面。 (例如:iframe 加载的 hello.html)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多