WinForms WebBrowser控件不加载整个站点

时间:2017-07-14 10:07:03

标签: c# winforms

我在C#中使用WebBrowser来显示包含登录表单的网站。成功登录后,网站的某些部分未显示在WebBrowser中,但在默认浏览器中,相同的网站显示正确。

另一个问题是,当我点击WebBrowser中的链接时,它会在默认浏览器中打开,例如(Firefox,Chrome等)。

我的应用程序会自动设置用户名和密码以便登录。

ChangeUserAgent();
var request = (HttpWebRequest)WebRequest.Create(loadLinks(namewebsite));
string useragent = request.UserAgent = "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393";
webBrowser2.Navigate(request.RequestUri,null,null, "User-Agent:Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393");
loadauthintication(namewebsite, _username, _password);

这是方法loadauthintication

using (var webClient = new System.Net.WebClient())
        {
            var json = webClient.DownloadString(@"http://example.com/getauthintication.php?name="+name+"&user="+user+"&pass="+pass);
            // Now parse with JSON.Net
           // MessageBox.Show(json);
            string[] array = json.Split('~');
            username = array[0];
            password = array[1];

        }

方法

public void ChangeUserAgent()
    {
       ua = "Googlebot/2.1 (+http://www.google.com/bot.html)";

        UrlMkSetSessionOption(URLMON_OPTION_USERAGENT_REFRESH, null, 0, 0);
        UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, ua, ua.Length, 0);
    }

1 个答案:

答案 0 :(得分:0)

WebBrowser control的问题在于默认情况下它会在IE7渲染模式下呈现输出。 Rick Strahl编写了一个very detailed post,其中涵盖了解决此问题的一些方法。

我通常使用的方法是通过在HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION创建一个新密钥来修改注册表,该密钥以应用程序的可执行文件命名(例如ConsoleApplication1.exe)并将值设置为是我所知道的Internet Explorer版本将安装在目标环境中 - 对我而言,它总是IE11 - 值为11001.

注意:正如Rick在帖子中提到的那样,请记住,当通过Visual Studio运行时,你的exe的名称可能是ConsoleApplication1.vshost.exe,因此你需要为该

添加注册表项