2010-04-16 1 views
1

weBrowser를 통해 웹 페이지를 자동화하려고하는데 클릭하려는 버튼에 ID가없는 값만 있습니다. 여기에 대한 HTML 코드입니다 : 버튼이 더 ID가없는 나는이 useGetElementById 수 없습니다InvokeMember ("click") webBrowser help

<td width='10%' align='center'><button class="buttonf" onclick="window.location='staticpage.php?accept=123456' ">Accept</button></td> 

. 내가 할 경우

HtmlElement goButton = this.webBrowser1.Document.All["Accept"]; 
goButton.InvokeMember("click"); 

내 스크립트 중지 "goButton.InvokeMember ("클릭 ")를 강조 nullreference 오류를 보여주는;"

내가 할 경우

var inputControls = (from HtmlElement element in webBrowser1.Document.GetElementsByTagName("input") select element).ToList(); 
      HtmlElement submitButton = inputControls.First(x => x.Name == "Accept"); 

내 스크립트가 나에게주는 "는 HTMLElement submitButton"라인 에서 오류 "순서가 일치하는 요소를 포함하지 않는다"때로는 페이지가 이들 중 하나 이상의 버튼을 그대로 가지고, 그래서 뿐만 아니라, 또는 적어도 각각의 차이를 말할 크게 될 것입니다이 함께

어떤 도움을 깨는 스크립트없이 하나를 클릭 할 수있을 수있을 필요가 없음을이 같은

답변

3

버튼 태그를 찾으려고하는데 정확합니까? 이 경우 GetElementsByTagName("input")은 아마도 GetElementsByTagName("button")이어야합니다. 버튼의 이름도 Accept가 아니며 InnerText 속성입니다. 버튼이 있는지 확실하지 않으면 FirstOrDefault을 사용하고 null 반환 값을 확인하는 것이 더 나을 것입니다. '.First'가 일치하지 않으면 충돌하고 레코딩됩니다.

하나 이상의 수락 버튼이있는 경우 버튼의 차이점을 어떻게 표시 할 수 있는지에 관해서는 생각해보십시오.

이 코드는 테스트되지 않은,하지만 당신이 돕는 네 그 코드가 그것을 한 모두 감사합니다

var buttonControls = (
    from HtmlElement element 
    in webBrowser1.Document.GetElementsByTagName("button") 
    select element 
).ToList(); 

HtmlElement submitButton = 
    buttonControls.FirstOrDefault(x => x.InnerText == "Accept"); 

if (submitButton != null) { 
    submitButton.InvokeMember("click"); 
} else { 
    //didn't find it 
} 
+0

필요에 가까운 수 있습니다! 이제 각 버튼의 차이점을 알 수있는 방법을 찾아야합니다. – Tom

0

이 보이는하지 평가 일치하는 요소가 페이지에 있습니다. 버튼이 삽입 된 프레임이 아닌 현재 페이지에 있는지 확인하십시오.

어쨌든 오류 검사가 필요합니다. NullReferenceException을 의도적으로 발생 시켜서는 안됩니다.