Web浏览器SetAttribute不工作(密码字段)

时间:2010-11-24 17:38:10

标签: c# passwords browser setattribute

尝试编写一个程序,在c#中的webbrowser中自动登录。这是我目前用于此目的的代码:

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

它填写用户名,但不填写密码? ): 谷歌搜索,但只有少数人开始没有人回复的主题。 /:

希望有人可以帮助我。 这是密码字段的来源:

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

3 个答案:

答案 0 :(得分:4)

以上都不适用于我,我可以在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中设置了密码值,并且它再次没有正确设置值

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

答案 1 :(得分:3)

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

如果您想看看发生了什么,请在顶部创建一个Panel,在底部添加WebBrowser的表单。添加3个TextBoxesButton和另一个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框正确填充。

韦恩

答案 2 :(得分:1)

尝试像这样设置innerText属性,它适用于我(vb.net):

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

txtPassword.InnerText = "123456"