Веб-браузер SetAttribute не работает (поле пароля) - PullRequest
3 голосов
/ 24 ноября 2010

пытался написать программу, которая автоматически регистрирует меня в браузере на c #.Это код, который я сейчас использую для этой цели:

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 ]

4 голосов
/ 05 декабря 2014

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

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

3 голосов
/ 20 февраля 2011

Вам нужно подождать, пока обновление документа не будет завершено. 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 в форме заполнено правильно.

Wayne

1 голос
/ 25 ноября 2010

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

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

txtPassword.InnerText = "123456"
...