2016-09-30 58 views
-1
 private void button2_Click(object sender, EventArgs e) 
     { 
     webBrowser1.Document.GetElementById("login_login_button").InvokeMember("Click"); 
//something that wait about 1 or 2 second before execute next line?    
     webBrowser1.Document.GetElementById("nav_settings_link").InvokeMember("Click"); 
     webBrowser1.Document.GetElementById("language_change2").InvokeMember("Click");         

     } 

從這個代碼,我試圖Thread.Sleep();Task Delay();但它顯示nullException ...(我想是因爲他們正在運行,而該網頁不滿載),任何人都可以幫助我出去了?如何運行每種方法在網頁瀏覽器

現在,我已經發現,我想要的方法是異步方法,以減緩他們仍在運行的時間。

private async void button2_Click(object sender, EventArgs e) 
     {    webBrowser1.Document.GetElementById("login_login_button").InvokeMember("Click");await Task.Delay(1000);      webBrowser1.Document.GetElementById("nav_settings_link").InvokeMember("Click"); 
await Task.Delay(1000);  webBrowser1.Document.GetElementById("language_change2").InvokeMember("Click"); } 
+1

只是把代碼中的客戶端。 – Hendry

+0

NullException表示找不到您的元素。所以,你接下來要做的事情很多:等待......再等......直到它顯示出來。一種方法是做循環檢查,直到元素不爲空(當然有延遲),然後點擊它。 – kurakura88

+0

@ kurakura88你有什麼想法來做到這一點? – puydan

回答

0

只是一個例子:

using System.Diagnostics;  


Stopwatch sw = new Stopwatch(); 
int timeout = 60; // 60 seconds 
sw.Start(); // Use Restart for the next element, to reset the time to 0 first. 
var element = webBrowser1.Document.GetElementById("login_login_button"); 
while(element == null && sw.Elapsed.TotalSeconds < timeout) 
{ 
    Thread.Sleep(2000); 
    element = webBrowser1.Document.GetElementById("login_login_button"); 
} 
sw.Stop(); 
if(element!=null) 
{ 
    element.InvokeMember("Click"); 
} 
... 
// if success, repeat with similar pattern for the next element 
// if you still can't find the element, you'd better quit what you are trying to do 

說明:

  1. System.Diagnostics程序,使添加秒錶
  2. 超時,這樣你就不會永遠等待
  3. 店元素轉換成變量
  4. 檢查元素每2秒
  5. 如果發現點擊繼續下一個
  6. 如果不是....你可能想退出,你在做什麼
+0

我忘了告訴你一些事情,當webBrowser1.Document.GetElementById(「login_login_button」);被執行 它導致另一頁。這就是爲什麼我想要執行下一行代碼之前需要等待的東西。 – puydan

相關問題