보통 크롤링을 Python으로 많이 하는 데, C#에서 쓸 일이 있어 만들어 보았다.
프로젝트 설정하기.
Winform으로 만들 거기 때문에, Winform 프로젝트를 하나 생성해주고,,
먼저, Visual Studio 에서 Selenium을 사용하기 위해 Nuget Package를 설치 해줘야한다.
도구 > NuGet 패키지 관리자 > 솔루션용 NuGet 패키지 관리...
찾아보기 에서 selenium 검색
위 이미지에서 체크 된거 4개 설치.
Selenium.WebDriver
Selenium.Support
Selenium.WebDriver.ChromeDriver
DotNetSeleniumExtras.WaitHelpers
(IEDriver는 더 이상 우리와 함께 가지 못했기 때문에,, 버렸습니다... ChromeDriver만 설치.)
프로그램 디자인.
셀레니움 패키지 설치 다 해주고, Winform 프로젝트를 다음과 같이 디자인 해줌.
주소 텍스트박스 : txtAddress
우편번호 텍스트박스 : txtZipCode
검색 버튼 : btnSearch
주소 입력창에 주소를 입력하고,
검색 버튼을 누르면,
우편번호 텍스트박스에 결과값을 나오도록 해보자.
1. 검색 버튼 이벤트에서 크롬 드라이버 인스턴스 생성.
우편번호 검색은 우체국 통합검색 사이트 이용.
https://www.epost.go.kr/search.RetrieveIntegrationNewZipCdList.comm
2. 크롬 드라이버에서 연결될 URL 지정.
크롬에서 우편번호 검색사이트를 들어간다.
F12 눌러서 개발자 모드를 켜서 나오는 html에서 검색창과, 검색버튼을 확인한다.
요 버튼을 클릭하고, 사이트 화면에서 검색창, 검색 버튼 위치에 마우스를 가져가면,
오른쪽에 해당하는 html 위치가 나온다.
그런 다음 해당되는 라인에 우클릭을 눌러 Copy > Copy XPath 해서 코드에 붙여넣기 한다.
3. 주소 입력
복사해서 driver.FindElement(By.XPath("[요기]") 큰 따옴표 안에 붙여넣기 하면
이렇게 나오는데, 큰따옴표 안에 또 큰따옴표가 있기 때문에, 아래와 같이 작은따옴표로 바꿔주면 된다.
아래줄은 찾은 검색창에 SendKeys로 주소입력창에 쓴 텍스트를 전달해주는 것이다.
4. 검색 버튼 클릭
검색 버튼같은 경우도 검색창과 같은 방식으로 XPath를 가져오면 되고,
찾은 검색 버튼을 Click 해준다.
5. 우편번호 가져오기
검색된 우편번호를 가져오는 부분은 XPath가 아닌 ClassName으로 가져오는데, 이는 해당된 XPath로 검색을 하면 Body 부분이 다 결과로 나와서, 결과부분의 ClassName인 "title2"로 검색해서 결과에서 우편번호 5자리만 잘라내게 했다.
6. 크롬 드라이버 종료
마지막으로 검색이 끝나면 크롬드라이버를 종료해준다.
* 비교 *
driver.Close();
같은 경우는 처음에 오픈된 크롬 창 하나만 닫는 것.
크롬 드라이버는계속 실행 중.
그리고 우편번호 검색창을 켜면 팝업으로 바로가기 설치 창도 같이 켜지는데 얘도 안꺼짐.
초반에 켜진 한 개의 창만 꺼짐.
driver.Quit();
같은 경우는 드라이버가 종료되면서 열렸던 모든 크롬창이 꺼짐.
전체 코드.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
using System;
using System.Windows.Forms;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace seleniumCrawler
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSearch_Click(object sender, EventArgs e)
{
//크롬 드라이버 인스턴스 생성
IWebDriver driver = new ChromeDriver();
//우체국 우편번호 검색 사이트 URL
driver.Url = "https://www.epost.go.kr/search.RetrieveIntegrationNewZipCdList.comm";
try
{
//주소 입력창에 주소 입력
var searchBox = driver.FindElement(By.XPath("//*[@id='keyword']"));
searchBox.SendKeys(txtAddress.Text);
//검색 버튼 클릭
var searchButton = driver.FindElement(By.XPath("//*[@id='btnZipSearch']"));
searchButton.Click();
//우편번호 검색 결과 가져오기
var searchResult = driver.FindElement(By.ClassName("title2"));
string result = searchResult.Text.Substring(0, 5);
txtZipCode.Text = result;
//driver.Close();
driver.Quit();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
driver.Quit();
}
}
}
}
|
cs |
'IT > C#' 카테고리의 다른 글
[C#] ZedGraph Labeling (0) | 2022.11.17 |
---|---|
[C#] Array나 List에 같은 값 또는 연속된 int 값 채우기 (feat. Enumerable Range & Repeat) (0) | 2022.10.28 |
[C#] 마우스 위치에 따라 3배 확대 이미지 보여주는 프로그램 (feat. 반투명 사각형 그리기) (0) | 2022.04.15 |
[C#] 선택된 사각형 위에서 마우스커서 모양 변경하기 (0) | 2022.04.06 |
[C#] 윈도우 그림판 기능 추가해보기 (PPT처럼 도형과 도형을 직선으로 잇기) (0) | 2021.03.31 |