2017-01-23 2 views
0

C# winform 프로젝트에서 웹 브라우저 개체를 사용하여 웹 사이트에 로그인하고 특정 목록으로 이동 한 다음 해당 목록을 사용합니다. 로그인 한 후 양식 안에있는 일부 드롭 다운 선택 항목을 선택하고 양식을 제출해야합니다 (제출 요소가 없습니다 - 양식 제출은 onclick 이벤트로 고정 된 이미지를 클릭하여 완료됩니다. 아래 그림 참조).C# webbrowser를 사용하여 드롭 다운 선택에서 선택하고 양식 제출 스크립트를 호출하는 방법

다음은 대상 사이트에서 코드의 축약 된 버전입니다 (필자는이 코드를 짧게 만들었습니다. 적절한 모든 것을 그대로 둔 채 생각했습니다. HTML과 javascript에 초점을 맞추기 위해 모든 스타일을 잘라 냈습니다) . 마지막으로 참고 - 내가 찾았지만 기능 objForm.submit 찾을 수 없습니다 :

<form name="frm1" id="frm1" action="/tab/formaction.asp" method="post"> 
<table> 
<tr><td> Locations</td></tr> 
<tr><td> 
<table> 
    <tr> 
     <td>Origin</td> 
     <td> 
      <select title="Choose Origin Location(s)" name="origin_location" 
      id="origin_location" multiple="multiple"> 
       <option value="0">ANYWHERE</option> 
     <option value="1">North West</option> 
     <option value="2">North Central</option> 
     <option value="3">Great Lakes</option> 
     <option value="4">North East</option> 
     <option value="5">South West</option> 
    </select> 
     </td> 
    </tr> 
    <tr> 
     <td>Destination</td> 
     <td> 
      <select title="Choose Destination Location(s)" 
       name="destination_location" id="destination_location" 
       multiple="multiple"> 
       <option value="0">ANYWHERE</option> 
     <option value="1">North West</option> 
     <option value="2">North Central</option> 
     <option value="3">Great Lakes</option> 
     <option value="4">North East</option> 
     <option value="5">South West</option> 
    </select> 
     </td> 
    </tr> 

    <tr> 
     <td>Number of People</td> 
     <td> 
      <select name="people"> 
     <option value="1">1+</option> 
        <option value="2">2+</option> 
        <option value="3">3+</option> 
        <option value="4">4+</option> 
      </select> 
      <select style="visibility:hidden;" name="equality"> 
       <!-- 
       <option value="<=">Less than or Equal</option> 
       <option value="=">Equal</option> 
       !--> 
       <option value=">=">Greater than or Equal</option> 
      </select> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <a href="javascript: void 0;" onclick="objForm.submit(); return 
       false;"> 
       <img src="/tab/images/buttons/submit.gif" border="0" 
        WIDTH="71" HEIGHT="21"> 
      </a> 
     </td> 
    </tr> 
</table> 
</td></tr></table> 
<input type="hidden" name="origin_text" id="origin_text"> 
<input type="hidden" name="origin_region_id" id="origin_region_id"> 
<input type="hidden" name="origin_state_id" id="origin_state_id"> 
<input type="hidden" name="origin_city_id" id="origin_city_id"> 

<input type="hidden" name="destination_text" id="destination_text"> 
<input type="hidden" name="destination_region_id" 
     id="destination_region_id"> 
<input type="hidden" name="destination_state_id" id="destination_state_id"> 
<input type="hidden" name="destination_city_id" id="destination_city_id"> 

<input type="hidden" name="equality_text" id="equality_text"> 
<input type="hidden" name="sZip" id="sZip"> 
</form> 

내가 시도 무엇을 :

webBrowser1.Document.GetElementById("origin_location") 
    .SetAttribute("value", "4"); 

webBrowser1.Document.GetElementById("destination_location") 
    .SetAttribute("value", "4"); 

내가 거기, 내가 제대로 그 2 일을하고 있는지 확인하고, 3 분의 1을 아니다 :내 첫번째 생각은 다음과 같이, 내가 선택하고 싶은 세 가지의 제 1 및 제 2의 속성을 설정하는 것이 었습니다 ID가 없으므로 선택 방법을 모릅니다. 나는 비교적 새로운 코더이고 어떤 도움이나 지침을 주셔서 감사합니다,

<a href="javascript: void 0;" onclick="objForm.submit(); return false;"> 
    <img src="/tab/images/buttons/submit.gif" border="0" WIDTH="71" 
    HEIGHT="21"> 
</a> 

으로는 분명 있습니다

마지막으로, 나는 고정 된 이미지를 클릭하거나 읽는 셀에 온 클릭 스크립트를 호출합니다.

답변

0

에서 getElementById 메도와 세 번째 할 수있는 권리, 유 캔트 액세스,하지만이 함께이 HTML 요소를 얻을 수 있습니다 :

webBrowser1.Document.getElementsByTagName("select"); 

이것은 HtmlElementCollection를 반환해야합니다. 세 개의 "선택"요소 만 있으므로이 컬렉션의 세 번째 요소 여야합니다.

클릭을 수행하려면 동일한 getElementbyTagName Methode를 사용하지만 "a"를 사용하십시오.

elementname.InvokeMember("click"); 

Tipp : 당신이 바로 그 요소가있는 경우 유와 클릭을 수행하는 컬렉션을 작성하고 디버그 모드에서 시작됩니다 중단 점을 설정합니다. 요소가 successfuly 수집 된 경우보다 :

+0

HansKrywaa - 귀하의 의견은 도움이되었습니다.지금 나는 dataviewgrid에 테이블에있는 정보를 바인딩하는 다음 단계로 나아갔습니다 - 물론 나는 정보를 거의 얻지 못하고있는 사이트가 id 나 별개의 클래스를 거의 사용하지 않는다는 사실에 다시 고심하고 있습니다. 나는 곧 또 다른 질문을 게시 할 수 있습니다 .... –

+0

당신이 별을 줄 수 있다면 그것이 도움이된다면 멋지게 될 것입니다 :) – HansKrywaa

+0

별이 어떻게 작동하는지 잘 모르겠습니다 - 나는 높이가없는 것처럼 보입니다. 여기에 충분한 점수 또는 명성을 주면 - 별에 대한 링크가 보이지 않습니다. 하지만 나는 최고의 대답으로 체크 표시하여 답변을 표시 않았다. 희망은 당신을 움직이는 데 도움이됩니다. –