2010-11-24 1 views
2

попытался написать программу, которая автоматически меняет в ящике веб-браузера в C#. Это код, я использую в настоящее время для этой цели: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); 
     } 

Он заполняет Логин, но не пароль?): Идти в горах, но есть только несколько человек, которые начали тему, о которой никто никогда не отвечал. /:

надеюсь, кто-то может мне помочь. это источник Ауф поле пароля:

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

@Adam Maras Спасибо за разъяснение. Удалив мой ответ, поскольку у меня нет совета для этого. – 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 внизу. Add 3 TextBoxes, a 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 ящик на вас форме населяет правильно.

Wayne

1

попытка установки свойства InnerText, как это, это работает для меня (vb.net):

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

txtPassword.InnerText = "123456" 
1

Ни один из вышеперечисленных работал для меня, я не мог назвать SetAttribute() на имя пользователя в текстовое поле обработчика событий DocumentCompleted(), но не текст для ввода пароля. В конце концов я получил его на работу по:

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 из источника, нашел и заменил значение пароля в необработанном html перед установкой DocumentText во втором WebBrowser, и он снова не установил значение правильно ,

Я хотел бы знать, что такое более чистое решение, если у кого-то есть