Аутологин в VB NET не удалось - PullRequest
0 голосов
/ 07 января 2020

Здравствуйте, я работаю над автологином для страницы, я использую элемент управления WebBrowser. У меня есть этот код, который устанавливает значение элементов DOM со значениями, найденными в моих элементах управления формы, TextBox1 и TextBox2:

WebBrowser1.Document.GetElementById("email").SetAttribute("value", TextBox1.Text.ToString())
WebBrowser1.Document.GetElementById("password").SetAttribute("value", TextBox2.Text.ToString())

Он заполняет элементы текстом из TextBoxes, но если я нажимаю «Войти» Кнопка говорит, что пользователь не существует или пароль неверный.

Эти 2 ввода, которые я пытаюсь заполнить:

<input type="email" name="email" tabindex="0" value="">
<input type="password" name="password" tabindex="0" value="">

Я также пытался загрузить значения с помощью элемента управления RichTextBox, и они совпадают, поэтому я не знаю, где находится проблема. Если я пытаюсь войти в систему вручную, все работает нормально.

1 Ответ

0 голосов
/ 07 января 2020

Элементы DOM не имеют атрибута ID, но у них установлены атрибуты имени. Это немного усложняет задачу, так как вам придется запрашивать элементы документа немного по-другому, но это все же достижимо. Попробуйте выполнить следующее:

Dim emailInput As HtmlElement = WebBrowser1.Document.GetElementsByTagName("input").GetElementsByName("email").FirstOrDefault()
Dim passwordInput As HtmlElement = WebBrowser1.Document.GetElementsByTagName("input").GetElementsByName("password").FirstOrDefault()

If (emailInput IsNot Nothing) Then
    emailInput.SetAttribute("value", TextBox1.Text)
End If
if (passwordInput IsNot Nothing) Then
    passwordInput.SetAttribute("value", TextBox2.Text)
End If

Этот код пытается получить первый элемент ввода с именем email, а также первый элемент ввода с именем password. Если элемент был найден, он устанавливает атрибут для соответствующего текста TextBox.

Вы заметите, что я удалил .ToString() из свойства Text. Это потому, что свойство Text возвращает String, и поэтому вы конвертировали String ... в String.

Обновление

Мои извинения, я сделал не понимаю, что HtmlElementCollection не поддерживает FirstOrDefault. Вам нужно будет немного изменить код:

Dim emailInputs As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("input").GetElementsByName("email")
Dim passwordInputs As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("input").GetElementsByName("password")
If (emailInputs.Count() > 0) Then
    Dim emailInput As HtmlElement = emailInputs.Item(0)
    emailInput.SetAttribute("value", TextBox1.Text)
End If
If (passwordInputs.Count() > 0) Then
    Dim passwordInput As HtmlElement = emailInputs.Item(0)
    passwordInput.SetAttribute("value", TextBox2.Text)
End If
...