c# - 在网络浏览器控件上自动登录

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

最佳答案

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

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

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

关于c# - 在网络浏览器控件上自动登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19385840/

相关文章:

c# - 清除网络浏览器控件中的选择

c# - 检测点击何时下载 winforms WebBrowser 组件中的文件

c# - 更改新窗口和用户控件 (WPF) 的默认 Visual Studio 模板

c# - 使用字段填写 PDF

c# - XML 到 JSON - 将 Json 对象转换为 Json 数组

c# - 从字符串末尾添加一个字符

c# - WPF WebBrowser 控件中的 ckeditor

c# - 是否可以在 WebBrowserControl(Windows 窗体)中记录和重复用户操作?

c# - 在转发器中获取 DropDownList 值