有一个更好的方法吗

时间:2011-05-31 21:18:15

标签: vb.net browser loops webforms 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属性的行上出现错误。我觉得在填写表单之前不会等待网页加载,这就是错误的原因。

有谁知道更好的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用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()

答案 1 :(得分:0)

可能元素“text”尚未加载或不在页面上?

您可以制作一些javascript来执行该任务,并将其注入页面。

以下是如何在javascript中进行“点击”: https://developer.mozilla.org/en/DOM/document.createEvent