0

我正在使用 webbrowser control 自动执行一项任务,该站点使用框架显示页面。我的问题是我到了一个点,我可以看到网页在 webbrowser 控件上正确加载,但是当它进入代码并且我看到 html 时,我什么也看不到。

我在这里也看到了其他示例,但所有这些都没有返回所有浏览器 html。

我用这个得到什么:

                    HtmlWindow frame = webBrowser1.Document.Window.Frames[1];
                    string str = frame.Document.Body.OuterHtml;

只是 :

带有SRC标签等属性的主框架标签 ,有什么方法可以处理这个问题吗?因为我可以看到网页已完全加载,为什么我看不到 html?当我在 Internet Explorer 上这样做时,我确实看到了页面源一旦加载为什么不在这里?

附加信息

页面上有两个框架:

我用这个如上:

HtmlWindow frame = webBrowser1.Document.Window.Frames[0];

        string str = frame.Document.Body.OuterHtml;

我得到了第一帧的正确 HTMl,但第二帧我只看到:

<FRAMESET frameSpacing=1 border=1 borderColor=#ffffff frameBorder=0 rows=29,*><FRAME title="Edit Search" marginHeight=0 src="http://web2.westlaw.com/result/dctopnavigation.aspx?rs=WLW12.01&amp;ss=CXT&amp;cnt=DOC&amp;fcl=True&amp;cfid=1&amp;method=TNC&amp;service=Search&amp;fn=_top&amp;sskey=CLID_SSSA49266105122&amp;db=AK-CS&amp;fmqv=s&amp;srch=TRUE&amp;origin=Search&amp;vr=2.0&amp;cxt=RL&amp;rlt=CLID_QRYRLT803076105122&amp;query=%22LAND+USE%22&amp;mt=Westlaw&amp;rlti=1&amp;n=1&amp;rp=%2fsearch%2fdefault.wl&amp;rltdb=CLID_DB72585895122&amp;eq=search&amp;scxt=WL&amp;sv=Split" frameBorder=0 name=TopNav marginWidth=0 scrolling=no><FRAME title="Main Document" marginHeight=0 src="http://web2.westlaw.com/result/dccontent.aspx?rs=WLW12.01&amp;ss=CXT&amp;cnt=DOC&amp;fcl=True&amp;cfid=1&amp;method=TNC&amp;service=Search&amp;fn=_top&amp;sskey=CLID_SSSA49266105122&amp;db=AK-CS&amp;fmqv=s&amp;srch=TRUE&amp;origin=Search&amp;vr=2.0&amp;cxt=RL&amp;rlt=CLID_QRYRLT803076105122&amp;query=%22LAND+USE%22&amp;mt=Westlaw&amp;rlti=1&amp;n=1&amp;rp=%2fsearch%2fdefault.wl&amp;rltdb=CLID_DB72585895122&amp;eq=search&amp;scxt=WL&amp;sv=Split" frameBorder=0 borderColor=#ffffff name=content marginWidth=0><NOFRAMES></NOFRAMES></FRAMESET>

更新

两个框架的url如下:

我看到的 html 的 Frame1

http://web2.westlaw.com/nav/NavBar.aspx?RS=WLW12.01&VR=2.0&SV=Split&FN=_top&MT=Westlaw&MST=

我没有看到其 html 的 Frame2:

http://web2.westlaw.com/result/result.aspx?RP=/Search/default.wl&action=Search&CFID=1&DB=AK%2DCS&EQ=search&fmqv=s&Method=TNC&origin=Search&Query=%22LAND+USE%22&RLT=CLID%5FQRYRLT302424536122&RLTDB=CLID%5FDB6558157526122&Service=Search&SRCH=TRUE&SSKey=CLID%5FSSSA648523536122&RS=WLW12.01&VR=2.0&SV=Split&FN=_top&MT=Westlaw&MST=

我没有得到 html 的第二帧的属性如下图所示:

在此处输入图像描述

谢谢

4

4 回答 4

1

我支付了上述问题的解决方案,它可以 100% 工作。

我所做的是使用下面的这个函数,它将计数返回给我正在寻找的我找不到的标签:S.. 使用它来调用下面列出的函数:

FillFrame(webBrowser1.Document.Window.Frames);



private void FillFrame(HtmlWindowCollection hwc)
        {


            if (hwc == null) return;
            foreach (HtmlWindow hw in hwc)
            {
                HtmlElement getSpanid = hw.Document.GetElementById("mDisplayCiteList_ctl00_mResultCountLabel");
                if (getSpanid != null)
                {

                    doccount = getSpanid.InnerText.Replace("Documents", "").Replace("Document", "").Trim();

                    break;
                }

                if (hw.Frames.Count > 0) FillFrame(hw.Frames);
            }


        }

希望它可以帮助人们。

谢谢

于 2012-02-12T20:37:22.440 回答
0

要获取 html,您必须这样做:

        WebClient client = new WebClient();
        string html = client.DownloadString(@"http://stackoverflow.com");

当然这是一个例子,你可以更改地址。顺便说一句,您需要使用 System.Net;

于 2012-02-11T14:00:48.520 回答
0

这工作得很好......获取带有所有内部元素的 BODY 元素:

在您的表单代码中的某处:

wb.Url = new Uri("http://stackoverflow.com");
wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wbDocumentCompleted);

这是 wbDocumentCompleted:

void wb1DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    var yourBodyHtml = wb.Document.Body.OuterHtml;
}

wb 是System.Windows.Forms.WebBrowser

更新:

与文档相同,我认为您的第二帧在您检查其内容时未加载...您可以尝试从此链接中的解决方案。您必须等待帧加载才能看到其内容。

于 2012-02-11T17:10:40.230 回答
0

最可能的原因是框架索引 0 与主页/父页面具有相同的域名,而框架索引 1 具有不同的域名。我对么?

这会产生一个跨框架的安全问题,WB 控件只会让您感到头晕目眩,不会告诉您到底出了什么问题,只会让您的对象、属性和数据为空(在尝试展开对象时的监视窗口)。

在这种情况下,您唯一可以访问的几乎是 URL 和 iFrame 属性,但 iFrame 内没有任何内容。

当然,有一些方法可以克服跨框架安全问题 - 但它们不是内置在 WebBrowser 控件中的,它们是外部解决方案,具体取决于您使用的 WB 控件(如 .NET 版本或 .NET 之前的版本)版本)。

让我知道我是否正确识别了您的问题,如果是,您是否希望我告诉您针对您的设置和 WB 控件实例量身定制的解决方案。

更新:我注意到您正在执行 .getElementByTagName("HTML")(0).outerHTML 来获取 HTML,您需要做的就是在文档对象或 .body 对象上调用它并且应该这样做. MyDoc.Body.innerHTML 应该得到你想要的内容。此外,请注意这些文档中还有其他 iFrame,以防万一。您能否给我们包含这两个 URL 的主文档 URL,以便我们/我可以复制您在这里所做的事情?另外,不知道你为什么使用 DomElement 但你应该将它转换为它想要转换的本机对象,无论是 IHTMLDocument2 还是你在监视窗口中看到的对象,我认为是 IHTMLFrameElement (如果我没记错的话,但是一旦你看到它,你就会明白我的意思)。如果您尝试使用 XML 对象,这可能是您无法获取 HTML 内容、更改对象声明和强制转换(如果有的话)并试一试并让我们知道 :) 的原因。现在我也很好奇:)。

于 2012-02-12T12:14:45.137 回答