Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Stand 4 U
- VisualStudio 2003 .NET
- 이메일수집기
- http://www.microsoft.com/downloads/
- 애러
- 이메일추출
- 누난 너무 예뻐
- 자동화 서버
- 폰번호추출
- 이메일수집
- 네이버
- 제2의 동방신기
- 절대참조
- 심플네이버
- 전번
- esperanca.kr
- 김밥할머니 폭행 동영상
- 네이버1위
- 이메일광고
- 폰번호정리
- 자동화 서버는 개체를 작성할 수 없습니다.
- 태마곡
- Visual Studio .NET 9.0 Express Edition
- 전화번호찾기
- 메일수집
- 비주얼 C++
- 김밥할머니 폭행사건
- iostream.h
- esperanca
- 용역직원
Archives
- Today
- Total
BLOG ESPERANCA
WebBrowser 컨트롤의 HTML 코드에서 DOM 객체처럼 특정 태그 내용을 추출 본문
C# WebBrowser 컨트롤의 HTML 코드에서 DOM 객체처럼 특정 태크 내용을 추출해본다.
먼저 이 작업을 위해서는 문서가 완전히 WebBrowser 컨트롤에 로드된후에 이루어져야 할것이다.
document에 문서가 로드완료되면 DocumentCompleted 이벤트가 발생한다. 여기서 알아야
할 것은 전체 문서가 완료되면 이벤트가 발생하는 것이 아니고 프레임 단위로 일어나기 때문에
웹페이지내에 여러 개의 프레임을 포함하고 있으면 프래임 개수만큼 발생하게 된다.
이 프레임들이 모두 로드되는 시점을 체크해서 기능을 넣으면 되는데 알수 있는 방법은 아래
예제 처럼 3가지 방법이 있다.01 |
/// <SUMMARY>
|
02 |
/// WebBrowser 에서문서가모두로드되었을때- 예제
|
03 |
/// </SUMMARY>
|
04 |
/// <PARAM
name="sender"></PARAM> |
05 |
/// <PARAM
name="e"></PARAM> |
06 |
private void webBrowser1_DocumentCompleted( object sender,
|
07 |
WebBrowserDocumentCompletedEventArgs e)
|
08 |
{
|
09 |
if (e.Url.AbsoluteUri
== webBrowser1.Url.AbsoluteUri) |
10 |
{
|
11 |
// 작업
|
12 |
}
|
13 |
}
|
14 |
/// <SUMMARY>
|
15 |
/// WebBrowser 에서문서가모두로드되었을때- 예제
|
16 |
/// </SUMMARY>
|
17 |
/// <PARAM
name="sender"></PARAM> |
18 |
/// <PARAM
name="e"></PARAM> |
19 |
private void webBrowser1_DocumentCompleted( object sender,
|
20 |
WebBrowserDocumentCompletedEventArgs e)
|
21 |
{
|
22 |
if ( this .webBrowser1.ReadyState == WebBrowserReadyState.Complete)
|
23 |
{
|
24 |
// 작업
|
25 |
}
|
26 |
}
|
27 |
/// <SUMMARY>
|
28 |
/// WebBrowser 에서문서가모두로드되었을때- 예제
|
29 |
/// </SUMMARY>
|
30 |
/// <PARAM
name="sender"></PARAM> |
31 |
/// <PARAM
name="e"></PARAM> |
32 |
private void webBrowser1_DocumentCompleted( object sender,
|
33 |
WebBrowserDocumentCompletedEventArgs e)
|
34 |
{
|
35 |
// 문서가완료되지않으면isBusy 는true 이다
|
36 |
if (webBrowser1.IsBusy
== false )
|
37 |
{
|
38 |
// 작업 |
39 |
}
|
40 |
} |
이제 WebBrowser 문서로드가 완료된 시점에서 HTML 을 분석한다.
그리고 분석한 내용을 바탕으로 특정 태그를 추출해본다.
아래의 예제는 재귀호출로 구현된 함수이며 webBrowser.Document.Body.Children로
넘어온 HTML 태그를 분석해서 태그이름과 내용을 쌍으로 TreeView Control 에 추가하는
내용이다.1 |
private System.Windows.Forms.TreeView treeDOM;
|
2 |
|
3 |
treeDOM.SuspendLayout();
|
4 |
// HTML 분석해서TreeView 에추가하는함수
|
5 |
ProcessElement(webBrowser1.Document.Body.Children,
treeDOM.Nodes); |
6 |
treeDOM.ExpandAll();
|
7 |
treeDOM.ResumeLayout(); |
01 |
private void ProcessElement(HtmlElementCollection elements,
TreeNodeCollection nodes) |
02 |
{
|
03 |
//
elements 객체스캔 |
04 |
foreach (HtmlElement
element in elements) |
05 |
{
|
06 |
// 태그이름을보여주기위한노드생성
|
07 |
TreeNode node = new TreeNode( "<"
+ element.TagName + ">" );
|
08 |
nodes.Add(node); |
09 |
|
10 |
if ((element.Children.Count == 0) && (element.TagName
!= null ))
|
11 |
{
|
12 |
// 노드아래element 에서태그에포함된Text 를추출한후추가한다.
|
13 |
node.Nodes.Add(element.InnerText);
|
14 |
}
|
15 |
else |
16 |
{ |
17 |
// 노드아래에자식요소가없으므로재귀호출하여진행한다
|
18 |
ProcessElement(element.Children, node.Nodes);
|
19 |
}
|
20 |
}
|
21 |
} |
다음 예제는 특정 태그를 추출하고자 할 때 쓰일만한 예제이다
01 |
// 각부모요소안의모든태그추출
|
02 |
foreach (HtmlElement element in elements.All)
|
03 |
{
|
04 |
//
특정태그목록추출 |
05 |
switch (element.TagName.ToUpper())
|
06 |
{
|
07 |
case "IMG" : |
08 |
// 이미지경로출력 |
09 |
MessageBox.Show(element.GetAttribute( "SRC" ));
|
10 |
break ;
|
11 |
case "A" : |
12 |
// 링크경로출력 |
13 |
MessageBox.Show(element.GetAttribute( "HREF" ));
|
14 |
break ;
|
15 |
case "LINK" :
|
16 |
MessageBox.Show(element.GetAttribute( "HREF" ));
|
17 |
break ;
|
18 |
}
|
19 |
} |