在网络浏览器控制上自动登录
本文关键字:登录 控制 网络 浏览器 | 更新日期: 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
}
}
}
}