2011-04-09 8 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? 실버 라이트? winforms? wpf? (기타.) –

답변

6

.

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에 의해 폼을 찾을 수 있고 submit 메소드라고 부를 수 있습니다.

사실 당신은 아마 해당 양식의 모든 필드를 찾아 더 나은 것하고 그냥 자신에게 POST : 당신은 GetElementsByTagName을 사용할 수 있습니다

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 태그에 대한 시도 할 수 있습니다 그리고 난 이