티스토리 뷰


웹브라우저 컨트롤 이벤트 중에 DocumentCompleted 라는게 있다.

웹문서가 다 읽혀졌는지를 확인해서 특정 처리를 할 수 있다.

근데 문제는 이 이벤트는 딱 한번만 발생하는게 아니라 웹문서내에 프레임이 들어가 있으면 프레임 갯수만큼 반복이 된다.

보기에는 한페이지 처럼 보이지만 실제 속을 들여다 보면 여러개의 프레임으로 구성되어 있다.

그러다 보니 원하는 결과를 제대로 얻을 수가 없다.

 

 - 웹페이지가 모두 로딩되었는지 체크하고 원하는 작업 실행하기

 

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {

            // 아래 부분은 한번만 발생
            if (e.Url.AbsoluteUri == webBrowser1.Url.AbsoluteUri)
            {
                GetSearchData(); // 원하는 작업 실행
            }
    }


 

 

 

- 아래는 다른 방법

 

// 문서로드 완료 이벤트
    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
            // 문서가 정상적으로 로드 완료 되었을 경우만 실행
            if (this.webBrowser1.ReadyState == WebBrowserReadyState.Complete)
            {
                // body 태그 이하 모든 요소들 추출
                foreach (HtmlElement elements in this.webBrowser1.Document.Body.Children)
                {
                    // 각 부모요소안의 모든 요소를 추출
                    foreach (HtmlElement element in elements.All)
                    {
                        // 특정 태그 목록 추출
                        switch (element.TagName)
                        {
                            case "IMG":
                                // 이미지 경로 출력
                                MessageBox.Show(element.GetAttribute("SRC"));
                                break;
                            case "A":
                                // 링크 경로 출력
                                MessageBox.Show(element.GetAttribute("HREF"));
                                break;
                        }
                    }
                }
            }
    } 
댓글
댓글쓰기 폼