在webbrowser控件上自动登录

时间:2013-10-15 16:02:12

标签: c# webbrowser-control

我正在创建一个带有Webbrowser控件的表单,该表单会自动登录到站点。当我调试它时,我可以看到它启动到网站并填写用户名和密码就好了,但一旦它登录,它再次通过相同的代码,因此导致错误,因为它找不到相同的元素。为什么程序循环遍历此代码?我是否将代码输入错误的事件处理程序?

namespace MyProject
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        HtmlDocument doc = webBrowser1.Document;
        HtmlElement username = doc.GetElementById("UserName");
        HtmlElement password = doc.GetElementById("Password");
        HtmlElement submit = doc.GetElementById("submit");
        username.SetAttribute("value", "XXXXXXXX");
        password.SetAttribute("value", "YYYYYYYYYY");
        submit.InvokeMember("click");
    }
}
}

2 个答案:

答案 0 :(得分:3)

只要任何文档完成加载,DocumentCompleted事件就会触发 登录后,当您加载下一页时,事件将再次触发。

如果您在实际登录页面,则应检查URL并仅执行自动登录。

(如果网络钓鱼者向您的应用发送虚假登录页面以窃取用户密码,请务必不要自动登录)

答案 1 :(得分:3)

namespace MyProject
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        bool is_sec_page = false;

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (!is_sec_page)
            { 
                HtmlDocument doc = webBrowser1.Document;
                HtmlElement username = doc.GetElementById("UserName");
                HtmlElement password = doc.GetElementById("Password");
                HtmlElement submit = doc.GetElementById("submit");
                username.SetAttribute("value", "XXXXXXXX");
                password.SetAttribute("value", "YYYYYYYYYY");
                submit.InvokeMember("click");
                is_sec_page = true;
            }
            else
            {
                //intract with sec page elements with theire ids and so on
            }
        }
    }
}