c# Winform:使用web浏览器控件自动登录到报表服务器

本文关键字:登录 报表 服务器 控件 Winform 使用 web 浏览器 | 更新日期: 2023-09-27 18:08:33

我想使用windows窗体应用程序(特别是Web浏览器控件)访问asp.net报表服务器。

我已经能够加载页面(通过点击按钮),但是,web浏览器仍然提示我输入报表服务器的用户名和密码。

如何自动设置报表服务器的用户名和密码,以便在加载Web浏览器时,Windows Security不会提示用户输入用户名和密码?

c# Winform:使用web浏览器控件自动登录到报表服务器

您可以尝试以下操作,它将为您工作

        Uri u = new Uri("http://192.168.0.91");
        UriBuilder ub = new UriBuilder(u);
        ub.UserName = "admin";
        ub.Password = "admin";
        webBrowser1.Url = ub.Uri;

在编程上,您可以使用WebBrowser.Document获取用于用户名和密码输入的元素,并输入值,还需要调用登录按钮。有一个简单的登录示例,

//After loading web page contents into browser get input as
private void FillAuthentication(string username, string password)
{
    if (_mainDialog.WebBrowser.Document == null) return;
    var tagsColl = _mainDialog.WebBrowser.Document.GetElementsByTagName("input");
    foreach (GeckoElement currentTag in tagsColl)
    {
        if (currentTag.TagName.Equals("email"))
            currentTag.SetAttribute("value", username);
        if (currentTag.TagName.Equals("pass"))
            currentTag.SetAttribute("value", password);
    }
}

现在执行点击

private void ClickLoginButton()
{
    Invoke(new MethodInvoker(() =>
    {
        try
        {
            if (_mainDialog.WebBrowser.Document == null) return;
            var col = _mainDialog.WebBrowser.Document.GetElementsByTagName("input");
            foreach (var element in col.Cast<HtmlElement>().Where(element => element.Name.Trim().Equals("") || element.Name.Trim().Equals("login")))
            {
                element.InvokeMember("click");
                break;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }));
}

在此之后,您还需要按元素检查是否有任何身份验证错误。

注意:你需要研究整个登录页面的html源,所以你将能够得到所需的元素。第二,下载&进口Skybound.Gecko.dll。