我正在使用GeckoFX 22 c#Web浏览器控件,但是无法在iframe中访问代码。当我检查壁虎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帧加载?
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;
}
我只是将其发布给可能遇到此问题的其他人
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");
}
}
}
[当我尝试访问iframe时遇到了类似的问题,所以我使用了
checkDoc.Window.Frames(1)
而不是
checkDoc.GetElementsByTagName("iframe")
括号内的值(即此处的1)取决于您的索引