2010-11-24 132 views
2

试图编写一个程序,在c#中的webbrowser中自动登录我。这是我目前用于此目的的代码:Webbrowser SetAttribute不起作用(密码字段)

HtmlElementCollection pageTextElements = loginBrowser.Document.GetElementsByTagName("input"); 
     foreach (HtmlElement element in pageTextElements) 
     { 
      if (element.Name.Equals("username")) 
       element.SetAttribute("value", this.UserName); 
      if (element.Name.Equals("password")) 
       element.SetAttribute("value", this.Password); 
     } 

它填写用户名,但不是密码? ): 谷歌搜索,但只有少数人开始话题,从来没有人回答。 /:

希望有人能帮助我。 这是源AUF密码字段:

<input type="password" value="" maxlength="50" size="25" name="password" class="bginput"> 
+0

@亚当马拉斯感谢澄清。删除我的答案,因为我对此没有任何建议。 – 2010-11-24 18:41:40

+0

您是否在设置密码字段属性的行上设置了一个断点,以查看它是否被击中? – 2010-11-24 18:42:59

+0

是的,我做过。它会被击中,执行,但根本不会将密码放在框中。 – Omegavirus 2010-11-24 18:58:38

回答

3

您需要等到文档更新已经完成。 DocumentCompleted事件方法。

如果您想查看正在进行的操作,请使用顶部的Panel和底部的WebBrowser创建一个表单。添加3 TextBoxes,一个Button和另一个TextBox。下面的方框的OnClick方法,请执行以下操作:

webBrowser1.Document.GetElementById(this.textBox1.Text).SetAttribute(this.textBox2.Text, this.textBox3.Text); 
this.textBox4.Text = webBrowser1.Document.GetElementById(this.textBox1.Text).GetAttribute(this.textBox2.Text); 

你会看到你的Password您表格上框正确填充。

韦恩

1

尝试设置innerText属性这个样子,这对我的作品(vb.net):

Dim txtPassword As HtmlElement = browser.Document.GetElementById("ctl00_ContentPlaceHolder1_txtPassword") 

txtPassword.InnerText = "123456" 
1

没有为我工作上面,我就可以在DocumentCompleted()事件处理程序的用户名文本框,但不是密码文本框中调用setAttribute()。我最终得到了它的工作:

HtmlElementCollection inputs = doc.GetElementsByTagName("input"); 
HtmlElement usr = inputs.GetElementsByName("username")[0]; 
usr.setAttribute("value", strUsername); 

HtmlElement pwd = inputs.GetElementsByName("password")[0]; 
pwd.GotFocus += new HtmlElementEventHandler(pwd_GotFocus); 
pwd.Focus(); 

中的onfocus处理程序然后:

void pwd_GotFocus(object sender, HtmlElementEventArgs e) 
{ 
    HtmlElement pwd = (HtmlElement)sender; 
    pwd.SetAttribute("value", strPassword); 
} 

我不知道为什么这个作品和其他没有。我只尝试更改密码,以防万一文档从设置用户名变为干扰它。我甚至还创建了另一个WebBrowser控件,然后从源文件中取出DocumentText,在第二个WebBrowser上设置DocumentText之前,在原始html中设置密码值并进行替换,然后再次没有正确设置值。

我很想知道更清洁的解决方案,如果任何人有一个