2013-04-11 36 views
0

我想要點擊按鈕並等待頁面加載。 我搜索,但沒有解決方案可以正常工作。 這部分代碼:等待按鈕單擊後加載頁面

el = webBrowser1.Document.GetElementById("LoginButton"); 
el.InvokeMember("click"); 
webBrowser1.Navigate(url); 

我需要它是點擊後,該應用程序將加載頁面,然後才轉到另一個頁面。 另外,webBrowser1.Navigate(url)必須與點擊方法相同。因爲它全部在一個循環中。

請幫忙。

EDITED。 * 更多代碼 *(第一個代碼是和例子是什麼,我需要)

List<string> list1 = new List<string>(); 

      bool flag = true; 

      while (flag) 
      { 
       flag = false; 

       foreach (HtmlElement he2 in webBrowser1.Document.GetElementsByTagName("a")) 
       { 
        if (he2.GetAttribute("href").Contains("profile.php?ID=")) 
        { 
         list1.Add(he2.InnerText); 
        } 

       } 

       foreach (HtmlElement he in webBrowser1.Document.GetElementsByTagName("a")) 
       { 

        if (he.InnerHtml == "Next") 
        { 
         flag = true; 

         he.InvokeMember("click"); 


        } 
       } 


      } 

當我點擊,翻頁必須加載,和我有解析下頁上的標籤,但它開始解析頁面在下一頁加載之前,所以它解析相同的頁面。

+0

你可以添加你的目標網址 – KF2 2013-04-11 14:14:58

+0

@IRSOG,抱歉,但沒有。我登錄網站,然後轉到私人消息。 – vasa911 2013-04-11 15:13:21

+0

el.InvokeMember(「click」)後你想要做什麼?發生 ? – KF2 2013-04-11 15:19:32

回答

0

您可以使用DocumentCompleted事件找出登錄完成的時間。

webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted); 
el = webBrowser1.Document.GetElementById("LoginButton"); 
el.InvokeMember("click"); 

void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    Uri myUrl = new Uri("http://stackoverflow.com"); 
    if (e.Url == myUrl) 
    { 
     WebBrowser1.Navigate(url); 
    } 
} 
+0

它沒有幫助,因爲我點擊後有一些代碼,我怎麼能回來? – vasa911 2013-04-11 15:14:34

+0

爲什麼不把其餘的代碼移動到事件處理程序中?或者將代碼分離到一個新的方法中並從事件處理程序中調用它? – 2013-04-11 15:15:34

+0

,因爲它在循環中 – vasa911 2013-04-11 15:17:42

1

最後,我剛剛從HREF我的按鈕,使用此代碼(insted的he.InvokeMember的( 「點擊」)) :

webBrowser1.Navigate(url_next); 
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) 
    Application.DoEvents(); 

它工作正常。