Есть лучший способ сделать это - PullRequest
1 голос
/ 01 июня 2011

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

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

Ответы [ 2 ]

1 голос
/ 01 июня 2011

Вы можете использовать DocumentCompleted Event, это событие гарантирует, что ваш документ готов, и все необходимые разделы загружены

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()
0 голосов
/ 01 июня 2011

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

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

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

...