Get GeckoFx firefox浏览器控件iframe html无法访问

问题描述 投票:1回答:3

我正在使用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帧加载?

c# iframe geckofx
3个回答
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;
}

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");
        }
    }
}

0
投票

[当我尝试访问iframe时遇到了类似的问题,所以我使用了

checkDoc.Window.Frames(1)

而不是

checkDoc.GetElementsByTagName("iframe")

括号内的值(即此处的1)取决于您的索引

© www.soinside.com 2019 - 2024. All rights reserved.