2013-06-22 58 views
0

我正在嘗試開發一個必須與網頁交互的應用程序。Webbrowser.document不會更新

我使用內置webbrowser填寫第一個表單並提交。這裏沒問題。

單擊此窗體時,頁面將加載一個不同的html代碼(表單上的第二個步驟)並使用相同的頁面。它不會觸發文檔完成事件,更糟糕的是,它不會更改文檔項目。 documenttext項具有新代碼,頁面在窗體上完美顯示,但文檔項仍保留舊代碼。如果沒有文檔,我不能點擊第二個按鈕。

所以,2個問題。

有沒有辦法強制文檔加載新的html代碼,所以我可以點擊它?

有沒有辦法在不使用Htmlelement.InvokeMember的情況下單擊該按鈕?

Private Sub login() 
    Browser.Navigate("website") 
    docflag.WaitOne() 
    docflag.Reset() 
    Dim inputs As HtmlElementCollection = document.GetElementsByTagName("input") 
    Dim login As HtmlElement = Nothing 
    For Each item As HtmlElement In inputs 
    Select Case item.Id 
     Case "nick" 
     item.SetAttribute("value", TBUsuario.Text) 
     Case "pass" 
     item.SetAttribute("value", TBPass.Text) 
     Case "" 
     Dim src As String = item.GetAttribute("src") 
     If src.IndexOf("/login.gif") <> -1 Then 
     login = item 
     End If 
    End Select 
    Next 
    Conecta(True) 
    login.InvokeMember("click") 
    docflag.WaitOne() 
    docflag.Reset() 
    'msg(document.Body.OuterHtml) returns code of the first page 
    'msg(document.documenttext) returns code of the actual page 
    document.GetelementById("identrar" + TBCodigo.Text).InvokeMember("click") 
    docflag.WaitOne() 
    docflag.Reset() 
End Sub 

Private Sub Browser_DocumentCompleted(sender As Object, e As  WebBrowserDocumentCompletedEventArgs) Handles Browser.DocumentCompleted 
document = Browser.Document 
docflag.Set() 
msg("Pagina cargada") 
End Sub 

編輯包括一些代碼。我在嘗試解決這個問題的同時閱讀,我應該使用一個單一的線程,同時使用webbrowser,但這似乎不是問題(我試過它在單線程和文檔不會改變)

+0

你到目前爲止嘗試過什麼?你能否提供一些不符合你想要的樣例代碼? – kdmurray

+0

edite包括一些代碼。現在我很遺憾,因爲我看到使用這個元素的唯一選擇是自己發送郵件消息,並且很快就會變得混亂 – Hamster

+0

您無法在UI線程上調用WaitOne()。阻止UI線程可防止引發DocumentCompleted事件。您的代碼需要移動到DocumentCompleted事件。使用變量來跟蹤狀態。 –

回答

0

首先使用webbrowser.Navigate("about:blank");

+0

不能這樣做。也許我沒有很好地解釋自己。我加載第一頁,然後使用item.invokemember,並加載第二頁。如果我加載:中間空白,我將無法調用它。 – Hamster