使用WebBrowser控件从Frame获取HTML - unauthorizedaccessexception

时间:2013-10-29 09:36:25

标签: html .net security automation webbrowser-control

我正在寻找一个免费工具或dll,我可以用它在.NET中编写自己的代码来处理一些Web请求。 假设我有一个带有一些类似于http://www.example.com?param=1的查询字符串参数的URL,当我在浏览器中使用它时,会出现几个重定向,最终呈现的HTML具有框架集,框架的内部html包含一个表格,其中包含数据需要。我想以CSV格式将此数据存储在外部文件中。显然,根据查询字符串参数 param ,数据会有所不同。假设我想运行应用程序并为参数值生成1000个CSV文件,从1到1000。

我对.NET,javascript,HTML有很好的了解,但主要问题是如何在服务器代码中获取最终的HTML。

我尝试的是创建了一个新的表单应用程序,添加了一个webbrowser控件并使用了这样的代码:

private void FormMain_Shown(object sender, EventArgs e)
    {
        var param = 1; //test
        var url = string.Format(Constants.URL_PATTERN, param);

        WebBrowserMain.Navigated += WebBrowserMain_Navigated;
        WebBrowserMain.Navigate(url);
    }

    void WebBrowserMain_Navigated(object sender, WebBrowserNavigatedEventArgs e)
    {
        if (e.Url.OriginalString == Constants.FINAL_URL)
        {
            var document = WebBrowserMain.Document.Window.Frames[0].Document;
        }
    }

但不幸的是,我接受了未经授权的访问,因为可能框架和文档位于不同的域中。有没有人知道如何解决这个问题,也许还有另一种全新的方法来实现这样的功能?

1 个答案:

答案 0 :(得分:2)

感谢Noseratio的评论,我设法用WebBrowser控件做到了。以下是一些可能有助于其他有类似问题的要点:

1)应使用DocumentCompleted事件。对于Navigated事件,文档的主体为NULL。

2)以下答案帮助很多:WebBrowserControl: UnauthorizedAccessException when accessing property of a Frame

3)我不知道IHTMLWindow2类似的接口,为了使它们正常工作我添加了对以下COM库的引用:Microsoft Internet Controls(SHDocVw),Microsoft HTML Object Library(MSHTML)。

4)我用下面的代码抓住了框架的html:

    void WebBrowserMain_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        if (e.Url.OriginalString == Constants.FINAL_URL)
        {
            try
            {
                var doc = (IHTMLDocument2) WebBrowserMain.Document.DomDocument;
                var frame = (IHTMLWindow2) doc.frames.item(0);
                var document = CrossFrameIE.GetDocumentFromWindow(frame);
                var html = document.body.outerHTML;

                var dataParser = new DataParser(html);
                //my logic here
            }

5)对于使用Html的工作,我使用了具有一些非常好的XPath搜索的精细HTML Agility Pack