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">

person Omegavirus    schedule 24.11.2010    source источник
comment
@ Адам Марас Спасибо за разъяснение. Удаление моего ответа, так как у меня нет совета по этому поводу.   -  person Chuck Callebs    schedule 24.11.2010
comment
Вы установили точку останова в строке, которая устанавливает атрибут поля пароля, просто чтобы увидеть, будет ли она вообще срабатывает?   -  person Adam Maras    schedule 24.11.2010
comment
да. он получает удар, выполняется, но просто не помещает пароль в поле.   -  person Omegavirus    schedule 24.11.2010


Ответы (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 в форме заполнено правильно.

Уэйн

person Wayne Hamberg    schedule 20.02.2011

Ничего из вышеперечисленного не сработало для меня, я мог вызвать 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, и он снова не установил значение правильно .

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

person Dan    schedule 05.12.2014
comment
У меня тоже чертовски работает! Пробовал всевозможные способы... этот шаг, кажется, работает. - person TPG; 05.10.2017

попробуйте установить свойство innerText следующим образом, у меня это работает (vb.net):

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

txtPassword.InnerText = "123456"
person Ali Tarhini    schedule 24.11.2010
comment
Решил проблему, записав все элементы в строку и изменив там &password= на &password=thepass ;) теперь работает, спасибо всем (: - person Omegavirus; 25.11.2010