#vb.net #browser #loops #webforms #setattribute
#vb.net #браузер #циклы #веб-формы #setattribute
Вопрос:
итак, у меня есть цикл в vb.net который загружает веб-страницу, заполняет форму и нажимает отправить
В настоящее время я использую их, соответственно, для ожидания загрузки веб-страницы, заполнения формы и нажатия кнопки Отправить
Do While Not browser.ReadyState = WebBrowserReadyState.Complete
System.Windows.Forms.Application.DoEvents()
Loop
и
browser.Document.GetElementById("text").SetAttribute("value", message)
и
For Each element As HtmlElement In browser.Document.GetElementsByTagName("input")
If element.GetAttribute("type") = "submit" Then
element.InvokeMember("click")
End If
Next
но моя проблема в том, что примерно после пятого запуска цикла он прерывается в строке с атрибутом set. И у меня такое ощущение, что он не ожидает загрузки веб-страницы, прежде чем попытается заполнить форму, и именно поэтому он выдает ошибку.
Кто-нибудь знает лучший способ сделать это?
Комментарии:
1. Исключение System.NullReferenceException не было обработано
2. Вы не можете использовать
DocumentComplete
событие?
Ответ №1:
Вы можете использовать событие DocumentCompleted, это событие гарантирует, что ваш документ готов, и загружены все необходимые разделы
Private Sub browser_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles browser.DocumentCompleted
' YOUR FORM FILLING CODE HERE
End Sub
а для отправки формы вы можете использовать метод forms ‘ submit(), подобный этому
browser.Document.GetElementById("text").DOMElement.form.submit()
Комментарии:
1. единственная проблема, которую я вижу в этом, заключается в том, что когда я нажимаю «Отправить», загружается новая страница, поэтому после нажатия кнопки «Отправить» не будет ли она просто перезапускать то, что находится в этом разделе, и ошибка, потому что нет формы для заполнения?
2. Вы можете проверить
browser.Document.GetElementById("text") IsNot Nothing
, прежде чем устанавливать для него значение. Но я бы использовал свой код заполнения fom вDocumentCompleted
случае, чтобы быть уверенным в полной загрузке страницы
Ответ №2:
Возможно, элемент «text» еще не загружен или его нет на странице?
Вы могли бы создать некоторый javascript для выполнения этой задачи и внедрить его на страницу.
Вот как сделать «щелчок» в javascript:https://developer.mozilla.org/en/DOM/document.createEvent
Комментарии:
1. Я знаю, что «текстовая» часть страницы не загружена, и именно это выдает мне ошибку, как я мог это исправить.
2. Вместо бесконечного цикла поиска условия, он должен зарегистрировать обработчик загрузки, в vb это выглядит так, как будто это называется DocumentCompleted , смотрите Другой ответ выше.