Есть лучший способ сделать это

поэтому у меня есть цикл в 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

но моя проблема в том, что примерно после пятого запуска цикла он srrors в строке с установленным атрибутом. И у меня такое ощущение, что он не ждет загрузки веб-страницы, прежде чем попытается заполнить форму, и поэтому он ошибается.

Кто-нибудь знает лучший способ сделать это?


person Bigandrewgold    schedule 31.05.2011    source источник
comment
System.NullReferenceException не было обработано   -  person Bigandrewgold    schedule 01.06.2011
comment
Разве вы не можете использовать DocumentComplete Event?   -  person Rajeev    schedule 03.06.2011


Ответы (2)


Вы можете использовать событие 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

и для отправки формы вы можете использовать метод submit() форм, подобный этому

browser.Document.GetElementById("text").DOMElement.form.submit()
person Rajeev    schedule 01.06.2011
comment
единственная проблема, которую я вижу в этом, заключается в том, что когда я нажимаю «Отправить», загружается новая страница, поэтому после нажатия «Отправить» он просто не перезапускает то, что находится в этом подразделе, и ошибка, потому что нет формы для заполнения? - person Bigandrewgold; 01.06.2011
comment
Вы можете проверить browser.Document.GetElementById("text") IsNot Nothing, прежде чем устанавливать для него значение. Но я бы использовал код заполнения fom в событии DocumentCompleted, чтобы быть уверенным, что страница полностью загружена. - person Rajeev; 02.06.2011

Может элемент "текст" еще не загружен или его нет на странице?

Вы можете сделать некоторый javascript для выполнения этой задачи и внедрить его на страницу.

Вот как сделать «щелчок» в javascript: https://developer.mozilla.org/en/DOM/document.createEvent

person NoBugs    schedule 31.05.2011
comment
Я знаю, что текстовая часть страницы не загружена, и это то, что дает мне ошибку, как я могу это исправить. - person Bigandrewgold; 01.06.2011
comment
Вместо бесконечного цикла, ищущего условие, он должен зарегистрировать обработчик загрузки, в vb он выглядит так, как будто это называется DocumentCompleted, см. другой ответ выше. - person NoBugs; 01.06.2011