안녕하세요. 명월입니다.
이번 포스팅에서는 이전 포스팅에서 설명했던 확장형 브라우져 AxWebBrowser Extended Browser에 대해 스크래핑를 하는 방법에 대해 소개하겠습니다.
바로가기 - [C#]확장형 브라우져 AxWebBrowser Extended Browser(확장형 webbrowser) 바로가기
먼저 폼 안에 브라우져 객체를 생성하겠습니다.
그리고 브라우져 컨트롤에 사용되는 MSHTML을 추가하겠습니다.
[프로젝트] -> [참조추가] -> [COM]탭 -> Microsoft HTML Object Library 입니다.
그리고 우리가 스크래핑을 해 볼 사이트는 지금 보고 있는 Tistory입니다. Navigate 함수에 Tistory 로그인 Url를 넣습니다.
그리고 DocumentComplete 이벤트로 Request여부를 알 수 있습니다.
그리고 스크래핑에 앞서 Tistory의 Html 소스를 확인해야 합니다.
이 때 사용하는 객체는 MSHTML 객체입니다.
저기에 디버그를 걸고 먼저 실행 하겠습니다.
이 돔 객체를 Editplus 로 확인 하도록 하겠습니다.
위 소스를 보면 ID, PASSWORD, 그리고 로그인 버튼이 있는 것을 확인 할 수 있습니다.
우리는 ID에 ID를 넣고 PASSWORD를 넣고 로그인 버튼을 누르는 메소드를 실행하면 됩니다.
(예제는 제 아이디, 비번번호이기에 가렸습니다.)
이렇게 하고 실행하면 자동 로그인이 완성 되겠습니다.
WebScrapping 기술은 여러 프로그램, 웹검색 봇이던가 정보수집용 봇을 개발할 때 많이 사용되는 객체입니다. 물론 기본적으로 주어지는 Webbrowser가 있지만 그것만으로는 API가 많이 부족함를 느낄 수 있습니다.
확장형 Webbrowser 는 MSDN 이 없기 때문에 일일히 하나하나 디버깅하면서 확인하는 방법 밖에 없습니다.
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
namespace Blog20121023
{
class Program : Form
{
private AxSHDocVw.AxWebBrowser axWebBrowser1;
[STAThread]
static void Main(string[] args)
{
Application.Run(new Program());
}
public Program()
{
InitializeComponent();
this.axWebBrowser1.DocumentComplete += new AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(axWebBrowser1_DocumentComplete);
}
private void axWebBrowser1_DocumentComplete(object sender, AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
{
login();
}
private void login()
{
mshtml.IHTMLDocument2 doc = (mshtml.IHTMLDocument2)this.axWebBrowser1.Document;
mshtml.IHTMLElementCollection HEC = (mshtml.IHTMLElementCollection)doc.all;
foreach (mshtml.IHTMLElement element in HEC)
{
if (element.tagName.Equals("INPUT") && element.outerHTML.IndexOf("loginid") != -1)
{
element.innerText = "*********";
}
else if (element.tagName.Equals("INPUT") && element.outerHTML.IndexOf("password") != -1)
{
element.innerText = "***********";
}
}
foreach (mshtml.IHTMLElement elements in HEC)
{
if (elements.tagName.Equals("INPUT") && elements.outerHTML.IndexOf("loginBtn") != -1)
{
elements.click();
}
}
}
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Program));
this.axWebBrowser1 = new AxSHDocVw.AxWebBrowser();
((System.ComponentModel.ISupportInitialize)(this.axWebBrowser1)).BeginInit();
this.SuspendLayout();
//
// axWebBrowser1
//
this.axWebBrowser1.Enabled = true;
this.axWebBrowser1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axWebBrowser1.OcxState")));
this.axWebBrowser1.Dock = DockStyle.Fill;
this.axWebBrowser1.TabIndex = 0;
//
// Program
//
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.axWebBrowser1);
this.Name = "Program";
((System.ComponentModel.ISupportInitialize)(this.axWebBrowser1)).EndInit();
this.ResumeLayout(false);
this.axWebBrowser1.Navigate("http://nowonbun.tistory.com/login/");
}
}
}
참조소스 : Blog20121023.zip (ID,PW가 제거 된 상태의 소스입니다.)
'Development note > C#' 카테고리의 다른 글
[C#] 파일 다운로드 예제 - 클라이언트 폼, 메인 폼 초기화, 이벤트 (0) | 2013.02.27 |
---|---|
[C#] 파일 다운로드 예제 - 서버 폼 초기화, 이벤트 (0) | 2013.02.26 |
[C#] 파일 다운로드 예제 - 소켓 부품 만들기 (0) | 2013.02.25 |
[C#] 파일 다운로드 예제- 화면 설계 (2) | 2013.02.24 |
[C#] 확장형 브라우져 컨트롤 AxWebBrowser Extended Browser control(확장형 webbrowser) (5) | 2012.10.22 |
[C#] 웹서버 개발하기 (0) | 2012.10.15 |
[C#] 스니퍼 (2) | 2012.10.09 |
[C#] 비프음 (0) | 2012.10.06 |