λ°˜μ‘ν˜•

μš”μ¦˜ μ½”λ‘œλ‚˜ λ•Œλ¬Έμ— μž¬νƒκ·Όλ¬΄λ‘œ μ „ν™˜ν•˜λŠ” 기업듀이 점차 늘고 μžˆμŠ΅λ‹ˆλ‹€. 제 μ§‘μ‚¬λžŒλ„ λ§ˆμ°¬κ°€μ§€μΈλ°μš”. 주말에 μž¬νƒκ·Όλ¬΄λ₯Ό μ€€λΉ„ν•œλ‹€κ³  ν•΄μ„œ νšŒμ‚¬μ—μ„œ 무슨 일을 ν•˜λŠ”μ§€ μ‚΄νŽ΄λ΄€μŠ΅λ‹ˆλ‹€. 그런데 생각 μ™Έλ‘œ λ‹¨μˆœ 반볡 업무가 λ„ˆλ¬΄ λ§Žλ”κ΅°μš”. ν•œ 예둜, 엑셀에 μ–΄λ–€ λͺ©λ‘μ΄ 있으면 ν•˜λ‚˜ν•˜λ‚˜ μ•„μ΄ν…œμ„ μ›Ή μ‚¬μ΄νŠΈμ—μ„œ κ²€μƒ‰ν•œ ν›„ νŠΉμ • κ²°κ³Ό 값을 λ‹€μ‹œ 엑셀에 μž…λ ₯ν•˜λŠ” 업무가 μžˆμŠ΅λ‹ˆλ‹€. λ˜λŠ”, μ›Ή μ‚¬μ΄νŠΈμ— μ•„μ΄ν…œμ„ μΆ”κ°€ν•˜κΈ° μœ„ν•΄ 일일이 λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©° 수 μ‹œκ°„μ„ λ³΄λ‚΄λŠ” 업무도 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. μ €λŠ” 직업이 ν”„λ‘œκ·Έλž˜λ¨ΈμΈμ§€λΌ, λ’€μ—μ„œ μ§€μΌœλ³΄λ©΄μ„œ 많이 μ•ˆνƒ€κΉŒμ›Œν–ˆμŠ΅λ‹ˆλ‹€. μ§„μž‘μ— μ•Œκ²Œ 됐으면 맀크둜 ν”„λ‘œκ·Έλž¨μ΄λΌλ„ λ§Œλ“€μ–΄ 쀬을 텐데 말이죠. κ²°κ΅­, 이번 κΈ°νšŒμ— ν”„λ‘œκ·Έλž¨μ„ ν•˜λ‚˜ λ§Œλ“€μ–΄ μ£Όλ©΄μ„œ 내심 λΏŒλ“―ν•΄ν–ˆμŠ΅λ‹ˆλ‹€.

자, κ·Έλž˜μ„œ 이번 ν¬μŠ€νŒ…μ—μ„œλŠ” .Net Selenium 라이브러리λ₯Ό μ΄μš©ν•œ μ›Ή 크둀링을 μ†Œκ°œν•©λ‹ˆλ‹€.

μ…€λ ˆλ‹ˆμ›€μ— κ΄€ν•œ μ „λ°˜μ μΈ λ‚΄μš©μ€ μ•„λž˜ 링크λ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš”.

[μ…€λ ˆλ‹ˆμ›€/Selenium, C#] C#μ—μ„œ μ…€λ ˆλ‹ˆμ›€μ„ μ‚¬μš©ν•˜λŠ” 방법 총정리

 

[μ…€λ ˆλ‹ˆμ›€/Selenium, C#] C#μ—μ„œ μ…€λ ˆλ‹ˆμ›€μ„ μ‚¬μš©ν•˜λŠ” 방법 총정리

μ…€λ ˆλ‹ˆμ›€(Selenium)μ΄λž€? μ…€λ ˆλ‹ˆμ›€μ€ μ›Ή λΈŒλΌμš°μ € μžλ™ν™”λ₯Ό μœ„ν•œ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€. λˆˆμ— λ³΄μ΄λŠ” λͺ¨λ“  μ½˜ν…μΈ μ— μž…λ ₯, 클릭, κ°€μ Έμ˜€κΈ° 등이 κ°€λŠ₯ν•©λ‹ˆλ‹€. κ°„λ‹¨ν•œ μ›Ή μ‚¬μ΄νŠΈ 접속뢀터 둜그인, 검색, οΏ½

luckygg.tistory.com

C#μ—μ„œ μ…€λ ˆλ‹ˆμ›€ μ€€λΉ„ν•˜κΈ°

본격적으둜 C#μ—μ„œ μ…€λ ˆλ‹ˆμ›€ 라이브러리λ₯Ό μ‚¬μš©ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€. C# WinForm ν”„λ‘œμ νŠΈλ₯Ό ν•˜λ‚˜ μƒμ„±ν•˜κ³  도ꡬ > NuGet νŒ¨ν‚€μ§€ κ΄€λ¦¬μž > μ†”λ£¨μ…˜μš© NuGet νŒ¨ν‚€μ§€ 관리 메뉴λ₯Ό ν΄λ¦­ν•©λ‹ˆλ‹€.

NuGet νŒ¨ν‚€μ§€ 관리 메뉴

검색 κ²°κ³Όμ—μ„œ Selenium.WebDriver, Selenium.Support, Selenium.WebDriver.ChromeDriver, DotNetSeleniumExtras.WaitHelpers λ₯Ό μ„ νƒν•˜κ³  μ„€μΉ˜ν•©λ‹ˆλ‹€. λ³Έλ¬Έμ—μ„œλŠ” Chrome κΈ°μ€€μœΌλ‘œ μ„€λͺ…ν•©λ‹ˆλ‹€.

Selenium 검색 κ²°κ³Ό

검색 κ²°κ³Ό 선택 ν›„ μ•„λž˜μ™€ 같이 'μ„€μΉ˜' λ²„νŠΌλ§Œ λˆ„λ₯΄λ©΄ μžλ™μœΌλ‘œ μ„€μΉ˜λ©λ‹ˆλ‹€.

라이브러리 μ„€μΉ˜

μ„€μΉ˜κ°€ λͺ¨λ‘ μ™„λ£Œλ˜λ©΄ μ•„λž˜μ™€ 같이 λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό μΆ”κ°€ν•œ ν›„ λΉŒλ“œκ°€ 되면 μ •μƒμ μœΌλ‘œ μ€€λΉ„κ°€ 된 κ²λ‹ˆλ‹€.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//Selenium Library
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;

namespace ExamSelenium
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}

Selenium을 μ΄μš©ν•œ ν”„λ‘œκ·Έλž˜λ° 방법

μš°μ„  크둬을 μ‚¬μš©ν•œ μ΄μœ λ‘œλŠ” 크둬이 개발자 도ꡬ(F12)λ₯Ό μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ— μ…€λ ˆλ‹ˆμ›€μ„ μ‚¬μš©ν•˜λŠ”λ° νŽΈλ¦¬ν•©λ‹ˆλ‹€. μ…€λ ˆλ‹ˆμ›€ APIλŠ” μ›Ή μ‚¬μ΄νŠΈμ˜ HTML μ½”λ“œ(Tag, Class Name, ID, XPath λ“±)λ₯Ό 톡해 μ›Ή μ‚¬μ΄νŠΈ μ œμ–΄ λ˜λŠ” 크둀링이 κ°€λŠ₯ν•©λ‹ˆλ‹€. μ’€ 더 μ‰½κ²Œ μ„€λͺ…ν•΄ λ³ΌκΉŒμš”?

μš°μ„  크둬을 μ‹€ν–‰ν•˜κ³  넀이버에 μ ‘μ†ν•©λ‹ˆλ‹€. 그리고 F12λ₯Ό λˆ„λ₯΄λ©΄ μ•„λž˜ κ·Έλ¦Όκ³Ό 같은 화면이 λ‚˜μ˜΅λ‹ˆλ‹€.

넀이버 메인 ν™”λ©΄

였λ₯Έμͺ½ 화면에 μ•Œλ‘λ‹¬λ‘ν•œ μ½”λ“œλ“€μ΄ λ³΄μ΄μ§€μš”? μ € μ½”λ“œλ“€μ€ HTML μ½”λ“œμž…λ‹ˆλ‹€. λ§Œμ•½ 둜그인 λ²„νŠΌμ˜ μ½”λ“œλ₯Ό μ–»κ³  μ‹Άλ‹€λ©΄ ν™”μ‚΄ν‘œ λ²„νŠΌμ„ ν΄λ¦­ν•œ ν›„ 둜그인 λ²„νŠΌ μœ„μ— κ°€μ Έλ‹€ 놓고 ν΄λ¦­ν•©λ‹ˆλ‹€.

둜그인 λ²„νŠΌμ˜ HTML μ½”λ“œ ν™•μΈν•˜κΈ°

둜그인 λ²„νŠΌμ˜ XPathλ₯Ό μ–»κ³  μ‹Άλ‹€λ©΄, μ•„λž˜μ™€ 같이 마우슀 우츑 λ©”λ‰΄μ˜ Copy XPath λ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

둜그인 λ²„νŠΌμ˜ XPath λ³΅μ‚¬ν•˜κΈ°

μ…€λ ˆλ‹ˆμ›€ APIλ₯Ό μ‚¬μš©ν•˜λ‹€ 보면 XPath도 μœ μš©ν•˜κ²Œ 많이 μ‚¬μš©λ˜λ‹ˆ κΌ­ κΈ°μ–΅ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€. μ΄λ ‡κ²Œ 얻은 Tag, Class Name, XPath 등은 μ•„λž˜μ™€ 같이 μ‚¬μš©λ©λ‹ˆλ‹€. μ›Ή νŽ˜μ΄μ§€μ˜ Elementλ₯Ό μ°ΎκΈ° μœ„ν•œ API μž…λ‹ˆλ‹€.

API λͺ©λ‘

μ—¬κΈ°κΉŒμ§€ C#μ—μ„œ μ…€λ ˆλ‹ˆμ›€ 라이브러리λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•œ 쀀비단계λ₯Ό 마치고, 이후 ν¬μŠ€νŒ…μ„ 톡해 예제 ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ°˜μ‘ν˜•