2013-05-28 69 views
0

我的代碼是:點擊HTML元素(按類)使用WebBrowser控件C#

WebBrowser browser = new WebBrowser(); 
      browser.Navigate("http://myurl"); 
      var links = browser.Document.GetElementsByTagName("a"); 
      foreach (HtmlElement link in links) 
      { 
       if (link.GetAttribute("class") == "expand-chain no-tracks") 
       { 
        MessageBox.Show("Click here"); 
        link.InvokeMember("click"); 
       } 
      } 

,我需要得到與「擴鏈無跡」類的所有HTML元素後,我需要點擊它。

我的問題是,我總是得到一個NullReferenceException因爲「對象引用未設置爲對象的一個​​istance」。

HTML代碼:

<a class="expand-chain no-tracks" data-chain-id="ZYZ" href="#" style="display: none;"> 
<span> 
Some text 
</span> 
</a> 

請幫幫我! 感謝

編輯 我也試圖與這個代碼,但它從未執行browser_DocumentCompleted功能

public void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 
      WebBrowser browser = sender as WebBrowser; 
      var links = browser.Document.GetElementsByTagName("a"); 

       foreach (HtmlElement link in links) 
       { 
        if (link.GetAttribute("class") == "expand-chain no-tracks") 
        { 
         MessageBox.Show("Here"); 
         link.InvokeMember("click"); 
        } 
       } 
     } 

     public void cazz() 
     { 
      WebBrowser browser = new WebBrowser(); 
      browser.Navigate("http://myurl"); 
      browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted); 
     } 
+0

什麼是沒有參考的元素?鏈接== null? –

+0

是的,鏈接爲空。並且我確信頁面已經完全下載,因爲當我嘗試使用WebClient獲得它時,我可以完全得到它 – aquanat

+0

mhh確實很奇怪。 「WebBrowser.Document」也是空的? –

回答

1

檢查這個環節,可以幫助你:http://www.codeproject.com/Articles/50544/Using-the-WebBrowser-Control-in-ASP-NET 我有同樣的問題,但我使用的是ASP.NET應用程序。

編輯:屬性「類」是特殊的。請嘗試使用「className」。

+0

回到原作者的版本,因爲鏈接本身就是很多答案,能夠隨時看到它的目的地(vs隱藏)是閱讀答案的重要部分。 –

+0

我很抱歉,我沒有意識到這一點。 :( – joaqapr

+0

「屬性」類是特殊的,請改爲「className」。「對我來說非常有用..非常感謝.. – Sachin

0

你可以嘗試添加一個條件檢查時,「瀏覽器」操作前不爲空?我認爲這個事件會稍後回來,你的「瀏覽器」將被完全初始化。

 public void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 
      WebBrowser browser = sender as WebBrowser; 

      if(browser.Document != null) 
      { 
       var links = browser.Document.GetElementsByTagName("a"); 

       foreach (HtmlElement link in links) 
       { 
        if (link.GetAttribute("class") == "expand-chain no-tracks") 
        { 
         MessageBox.Show("Here"); 
         link.InvokeMember("click"); 
        } 
       } 
      } 
     } 
+0

我已經添加if(browser.Document!= null),正如你所建議的,但它永遠不會執行browser_DocumentCompleted函數。這聽起來像它從來沒有成爲DocumentCompleted真實。執行期間 – aquanat

+0

瀏覽器值是: - \t \t \t瀏覽器{System.Windows.Forms.WebBrowser} \t System.Windows.Forms.WebBrowser + \t \t \t基{System.Windows.Forms.WebBrowser} \t System.Windows.Forms的.WebBrowserBase {} System.Windows.Forms.WebBrowser \t \t AllowNavigation \t真正\t布爾 \t \t AllowWebBrowserDrop \t真正\t布爾 \t \t CanGoBack \t假\t布爾 \t \t CanGoForward \t假\t布爾 + \t \t文件\t空\t System.Windows.Forms.HtmlDocument + \t \t DocumentStream \t空\t System.IO。流 \t \t DocumentText \t 「」 \t串 \t \t DOCUMENTTITLE \t 「」 \t串 \t \t DocumentType \t 「」 \t串 \t \t EncryptionLevel \t未知 – aquanat

+0

System.Windows.Forms.WebBrowserEncryptionLevel \t \t重點\t假\t布爾 \t \t IsBusy \t假\t布爾 \t \t IsOffline已\t假\t布爾 \t \t IsWebBrowserContextMenuEnabled \t真正\t布爾 \t \t ObjectForScripting \t空\t對象 + \t \t填充\t {左= 0,頂值= 0,右= 0,底值= 0 } \t System.Windows.Forms.Padding \t \t ReadyState \t未初始化\t System.Windows.Forms.WebBrowserReadySta TE \t \t ScriptErrorsSuppressed \t假\t布爾 \t \t ScrollBarsEnabled \t真正\t布爾 \t \t狀態文本\t 「」 \t串 + \t \t網址\t空\t的System.Uri + \t \t版本\t {} 8.0.7600.17051系統\t 。版本 \t \t WebBrowser快速切換啓用\t名真正\t布爾 + \t \t靜態成員\t \t + \t \t非公共成員 – aquanat