我正在创建一个带有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");
}
}
}
答案 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
}
}
}
}