在网络浏览器控制上自动登录

本文关键字:登录 控制 网络 浏览器 | 更新日期: 2023-09-27 18:35:22

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

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");
    }
}
}

在网络浏览器控制上自动登录

每当任何文档完成加载时,都会触发DocumentCompleted事件。
登录后,加载下一页时会再次触发该事件。

您应该检查 URL,并且仅在实际登录页面时才执行自动登录。

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

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
            }
        }
    }
}