2011-04-09 85 views
3

我需要通過類型在C#中獲得一個元素的HTML看起來像這樣:WebBrowser控件 - 獲取元素按類型?

<button type="submit" class="orangeBtn">Send Invitations</button> 

而且我希望它能夠在那裏我可以調用(「點擊」),但它沒有出現在C#中工作。我目前的代碼是:

HtmlElement m_SubmitField = m_Browser.Document.All["orangeBtn"]; 

if (m_SubmitField != null) 
    m_SubmitField.InvokeMember("click"); 

是否有替代的工作方式來做到這一點?

這不是我的服務器,所以我不能編輯HTML或添加jQuery。

我正在做一個自動化的應用程序來發送邀請給我想要加入的朋友,但他們沒有如上所示的ID或名稱的按鈕,所以無論如何有它調用(「點擊」) C#使用不同的方法?

謝謝。

+0

什麼是你的平臺嗎? ASP? Silverlight的?的WinForms? WPF? (等等。) – 2011-04-09 06:04:32

回答

6

您可以使用GetElementsByTagName

var elements = m_Browser.Document.GetElementsByTagName("button"); 
foreach (HtmlElement element in elements) 
{ 
    // If there's more than one button, you can check the 
    //element.InnerHTML to see if it's the one you want 
    if (element.InnerHTML.Contains("Send Invitations")) 
    { 
      element.InvokeMember("click"); 
    } 
} 
-1

那麼沒有id或名稱的按鈕將提交它所包含的任何形式 - 如果你知道HTML,那麼表單是否有ID?如果是這樣,你可以通過它的id找到表單並將其稱爲提交方法。

事實上,你可能會更好地發現,表格的所有字段,然後張貼至它自己:

var inputs = new NameValueCollection(); 
inputs.Add("field1", "value1"); 
inputs.Add("field2", "value2"); 
inputs.Add("field3", "value3"); 

System.Net.WebClient Client = new WebClient(); 
Client.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); 
byte[] POSTResultData = Client.UploadValues(postUrl, inputs); 
1

我試過下面的代碼,並且成功了。

HtmlElementCollection htmlcol = ((WebBrowser)sender).Document.GetElementsByTagName("input"); 
for (int i = 0; i < htmlcol.Count; i++) 
      { 
       if (htmlcol[i].GetAttribute("value") == "Search") 
       { 
        htmlcol[i].InvokeMember("click"); 
       } 
      } 

我已經嘗試此代碼爲下列條件

<input type="submit" value="Search"> 

你也可以嘗試這樣的HTML標籤,我希望它會爲你工作... 享受