在C#中完全加载网页(包含页面加载脚本)

时间:2016-07-22 15:47:20

标签: javascript c# .net cefsharp

我试图在我的应用程序背景中加载网页。以下代码显示了我如何加载页面:

            request = (HttpWebRequest)WebRequest.Create("http://example.com");
            request.CookieContainer = cookieContainer;

            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                Stream st = response.GetResponseStream();
                StreamReader sr = new StreamReader(st);
                string responseString = sr.ReadToEnd();
                sr.Close();
                st.Close();
            }  

如您所知,服务器会响应HTML代码或某些javascript代码,但javascripts函数会在网页中添加许多代码。所以我必须解释或编译第一个HTTP响应 我试图使用System.Windows.Forms.WebBrowser对象来完全加载网页,但这是一个弱引擎。
所以我尝试使用CEFSharp(Chromium嵌入式浏览器),它很棒并且工作正常,但我遇到了麻烦。以下是我如何使用CEFSharp加载网页:

ChromiumWebBrowser MainBrowser = new ChromiumWebBrowser("http://Example/");  
MainBrowser.FrameLoadEnd+=MainBrowser.FrameLoadEnd;
panel1.Controls.Add(MainBrowser);
MainBrowser.LoadHtml(responseString,"http://example.com");

当我在Form1.cs中使用此代码并将MainBrowser添加到面板时,它可以正常工作。但是我想在另一个类中使用它,实际上ChromiumWebBrowser是另一个自定义对象的一部分,而自定义对象在后台工作。此外,10或20个自定义对象可以同时工作。在这种情况下ChromiumWebBrowser不再起作用了!

第二个问题是线程问题,当我调用此函数时MainBrowser.LoadHtml(responseString,"http://example.com"); 它没有返回任何结果,因此我必须使用Semaphore暂停代码执行并等待此事件的结果:MainBrowser.FrameLoadEnd

所以我希望我的代码是这样的:

request = (HttpWebRequest)WebRequest.Create("http://example.com");
            request.CookieContainer = cookieContainer;
            string responseString="";
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                Stream st = response.GetResponseStream();
                StreamReader sr = new StreamReader(st);
                responseString = sr.ReadToEnd();
                sr.Close();
                st.Close();
            } 
            string FullPageContent = SomeBrowserEngine.LoadHtml(responseString);
            //Do stuffs
你能告诉我怎么做吗?你知道其他任何像我想要的网页浏览器引擎吗? 如果我对CEFSharp或其他概念做了任何错误,请告诉我。

0 个答案:

没有答案