我使用的是GeckoFX 22 c#网络浏览器控件,但无法管理iframe中的代码。当我检查gecko innerhtml时,似乎虽然iframe标签显示在html中,但它的内容却没有。
这是我用来获取浏览器控件的内部html的代码,它只显示iframe标记为空(当它应该包含其他文档时):
GeckoHtmlElement element = null;
var geckoDomElement = webBrowser.Document.DocumentElement;
if (geckoDomElement is GeckoHtmlElement)
{
element = (GeckoHtmlElement)geckoDomElement;
var innerHtml = element.InnerHtml;
}
以前我使用类似下面代码的代码来访问单个元素,这些元素工作正常:
GeckoDocument checkDoc = (GeckoDocument)webBrowser.Window.Document;
var x = (checkDoc.GetElementsByTagName("a").Where(b => b.Id == "ipt-form-format-aside").First());
我能够获得单个元素并更改其值/触发事件等,而不会出现主html文档的问题,但iframe中的任何内容都无法获取元素。我想也许Iframe尚未加载或类似的东西。有没有办法强制控件在尝试访问其元素之前等待I帧加载?
答案 0 :(得分:1)
string content = null;
var iframe = webBrowser.Document.GetElementsByTagName("iframe").FirstOrDefault() as Gecko.DOM.GeckoIFrameElement;
if(iframe != null)
{
var html = iframe.ContentDocument.DocumentElement as GeckoHtmlElement;
if (html != null)
content = html.OuterHtml;
}
答案 1 :(得分:0)
我只是为可能遇到此问题的其他人发布此内容
foreach (GeckoIFrameElement _E in geckoWebBrowser1.Document.GetElementsByTagName("iframe"))
{
if (_E.GetAttribute("class") == "testClass")
{
var innerHTML = _E.ContentDocument;
foreach (GeckoHtmlElement _A in innerHTML.GetElementsByTagName("input"))
{
_A.SetAttribute("value", "Test");
}
}
}