gpt4 book ai didi

c++ - QWebFrame没有在iframe下获取元素

转载 作者:行者123 更新时间:2023-11-28 05:55:56 27 4
gpt4 key购买 nike

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

最佳答案

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

您可能认为在Web页面中获取iframe元素的QWebFrame对象很容易,因为QWebFrame是由iframe / frame(http://doc.qt.io/qt-5/qwebview.html)组成的,并且必须有一个函数或方法才能获取iframe的QWebFrame对象。不幸的是,这不是一件微不足道的工作。您无法基于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-> documentElement()获得QWebFrame的整个DOM树。如果您不熟悉网页的内容,则可能不知道QWebFrame的名称或url或其他属性。您可以在子帧的迭代中打印这些属性的值,然后猜测哪个是您想要的。

关于c++ - QWebFrame没有在iframe下获取元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34158017/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com