[Windows] IE 컨트롤을 이용한 웹 페이지 제어

개발 노트 2008. 11. 7. 23:25 posted by 무병장수권력자


작성자 : 김문규
최초 작성일 : 2008.11.07

웹 사이트의 로그인을 자동으로 시키고 싶다든지....
일련의 웹 폼 입력 작업을 자동화 하고 싶다든지....

이럴때 없으신가요?
저는 이미 이전에 Server Based Computing 관련 과제 데모를 수행하면서 저런 요구 사항을 받았던 적이 있습니다.
최근에는 와이프가 특정 웹싸이트에 덧글을 특정 시간에 자동으로 올렸으면 좋겠다는 요구 사항을 받았고요..

그럴때는 AxInterop.SHDocVw.dll, Interop.SHDocVw.dll COM 오브젝트를 이용해서 IE 컨트롤에 입력된 DOM 오브젝트에 접근이 가능하고 해당 오브젝트를 제어할 수 있습니다.

아래의 참조 코드 입니다. 빨간색으로 표시된 것이 중요한 부분이지요. 감으로 이해 되실꺼에요.

static void Main()
  {
   Application.Run(new MainForm());
  }

private void FrmMain_Load(object sender, System.EventArgs e)
  {
   object loc = "http://www.google.com/";
   object null_obj_str = "";
   System.Object null_obj = 0;
   this.axWebBrowser1.Navigate2(ref loc , ref null_obj, ref null_obj, ref null_obj_str, ref null_obj_str);
  }

private void axWebBrowser1_DocumentComplete(object sender, AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
  {
   switch(Task)
   {
    case 1:

     HTMLDocument myDoc = new HTMLDocumentClass();
     myDoc = (HTMLDocument) axWebBrowser1.Document;

     // a quick look at the google html source reveals:
     // <INPUT maxLength="256" size="55" name="q">
     //
     HTMLInputElement otxtSearchBox = (HTMLInputElement) myDoc.all.item("q", 0);

     otxtSearchBox.value = "intel corp";

     // google html source for the I'm Feeling Lucky Button:
     // <INPUT type=submit value="I'm Feeling Lucky" name=btnI>
     //
     HTMLInputElement btnSearch = (HTMLInputElement) myDoc.all.item("btnI", 0);
     btnSearch.click();

     Task++;
     break;

    case 2:

     // continuation of automated tasks...
     break;
   }
  }


실제 동작하는 프로젝트 하나를 첨부합니다. 이는 codeguru.com 에서 검색했습니다.