반응형
C# WebBrowser 컨트롤의 HTML 코드에서 DOM 객체처럼 특정 태크 내용을 추출해본다.
먼저 이 작업을 위해서는 문서가 완전히 WebBrowser 컨트롤에 로드된후에 이루어져야 할것이다.
document에 문서가 로드완료되면 DocumentCompleted 이벤트가 발생한다. 여기서 알아야
할 것은 전체 문서가 완료되면 이벤트가 발생하는 것이 아니고 프레임 단위로 일어나기 때문에
웹페이지내에 여러 개의 프레임을 포함하고 있으면 프래임 개수만큼 발생하게 된다.
이 프레임들이 모두 로드되는 시점을 체크해서 기능을 넣으면 되는데 알수 있는 방법은 아래
예제 처럼 3가지 방법이 있다.////// WebBrowser 에서문서가모두로드되었을때- 예제 /// /// /// private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (e.Url.AbsoluteUri == webBrowser1.Url.AbsoluteUri) { // 작업 } } ////// WebBrowser 에서문서가모두로드되었을때- 예제 /// /// /// private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (this.webBrowser1.ReadyState == WebBrowserReadyState.Complete) { // 작업 } } ////// WebBrowser 에서문서가모두로드되었을때- 예제 /// /// /// private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { // 문서가완료되지않으면isBusy 는true 이다 if (webBrowser1.IsBusy == false) { // 작업 } }
이제 WebBrowser 문서로드가 완료된 시점에서 HTML 을 분석한다.
그리고 분석한 내용을 바탕으로 특정 태그를 추출해본다.
아래의 예제는 재귀호출로 구현된 함수이며 webBrowser.Document.Body.Children로
넘어온 HTML 태그를 분석해서 태그이름과 내용을 쌍으로 TreeView Control 에 추가하는
내용이다.private System.Windows.Forms.TreeView treeDOM; treeDOM.SuspendLayout(); // HTML 분석해서TreeView 에추가하는함수 ProcessElement(webBrowser1.Document.Body.Children, treeDOM.Nodes); treeDOM.ExpandAll(); treeDOM.ResumeLayout();위의 내용을 구현한 함수이다
private void ProcessElement(HtmlElementCollection elements, TreeNodeCollection nodes) { // elements 객체스캔 foreach (HtmlElement element in elements) { // 태그이름을보여주기위한노드생성 TreeNode node = new TreeNode("<" + element.TagName + ">"); nodes.Add(node); if ((element.Children.Count == 0) && (element.TagName != null)) { // 노드아래element 에서태그에포함된Text 를추출한후추가한다. node.Nodes.Add(element.InnerText); } else { // 노드아래에자식요소가없으므로재귀호출하여진행한다 ProcessElement(element.Children, node.Nodes); } } }
다음 예제는 특정 태그를 추출하고자 할 때 쓰일만한 예제이다
// 각부모요소안의모든태그추출 foreach (HtmlElement element in elements.All) { // 특정태그목록추출 switch (element.TagName.ToUpper()) { case "IMG": // 이미지경로출력 MessageBox.Show(element.GetAttribute("SRC")); break; case "A": // 링크경로출력 MessageBox.Show(element.GetAttribute("HREF")); break; case "LINK": MessageBox.Show(element.GetAttribute("HREF")); break; } }
반응형
'기타 언어 > C# & MFC' 카테고리의 다른 글
섭씨 / 화씨 변경기능 (0) | 2010.08.04 |
---|---|
Refactor 기능을 이용해 필드 자동소스 생성 (0) | 2010.08.02 |
C# Transaction 처리를 위한 예제 (1) | 2010.07.22 |
원하는 프로그램의 핸들 얻기 (3) | 2009.11.02 |
컴퓨터 종료 프로그램 (0) | 2009.09.22 |
TreeView 노드 Key 속성을 만드는 Visual C# 에서 방법 (0) | 2009.09.20 |
C# 프로그램에서 외부 브라우저로 사이트 이동시키기 (6) | 2009.09.18 |
C# 리소스 관리하기 (2) | 2009.09.16 |