如何获取iframe / frame QWebElement的QWebFrame?

时间:2012-11-02 04:24:48

标签: qt iframe qtwebkit

我有简单的Qt GUI应用程序,它使用QtWebkit。我正在加载具有大量嵌套IFRAME标签的复杂页面。我想遍历完整的DOM树(就像调试面板中的Chrome浏览器一样),包括iframe的内容。

我的代码是:

QWebElement doc = ui->webView->page()->mainFrame()->documentElement();
QWebElement iframe = doc.findFirst("iframe[id=someid]");
QWebFrame *webFrame = ....? // how to get the QWebFrame for an iframe/frame QWebElement?

注意: 我可以遍历所有帧(包括嵌套):

void MainWindow::renderFramesTree(QWebFrame *frame, int indent)
{
    QString s;
    s.fill(' ', indent * 4);
    ui->textLog->appendPlainText(s + " " + frame->frameName());
    foreach (QWebFrame *child, frame->childFrames())
        renderFramesTree(child, indent + 1);
}

但我的问题与此无关。我需要获得iframe-QWebElement的相应QWebFrame *。

感谢名单!

2 个答案:

答案 0 :(得分:2)

每个QWebFrame都有QList<QWebFrame *> QWebFrame::childFrames () const方法。每个框架也有QString QWebFrame::frameName () const。结合两者可以让你找到你需要的东西。

QWebFrame * frameImLookingFor = NULL;
foreach(QWebFrame * frame, ui->webView->page()->mainFrame()->childFrames())
{
    if (frame->frameName() == QLatin1String("appFrame"))
    {
        frameImLookingFor = frame;
        break;
    }
}

if (frameImLookingFor)
{
    // do what you need
}

答案 1 :(得分:0)

  • 在当前帧上运行选择器
  • 如果它返回的东西很好,我们发现我们的webframe在当前帧上,让我们调用这个元素X:
    • 现在使用选择器&#34; iframe,frame&#34;获取所有框架元素来自当前页面
    • 循环通过所有这些元素并尝试将它们与X帧匹配 通过这种方式,您可以在文档
    • 中找到X帧的精确INDEX
    • 最后,您现在可以专注于使用该INDEX的子框架
  • 否则这意味着在此框架中找不到选择器
    • 循环所有子框架,并为每个子框架重复整个过程