반응형

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

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

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

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

 

네이버 페이지만 해도 이 이벤트가 6~7번 발생한다.

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

 

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

 

 

    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;
                        }
                    }
                }
            }
    }

반응형

+ Recent posts