๋ฐ˜์‘ํ˜•

์š”์ฆ˜ ์ฝ”๋กœ๋‚˜ ๋•Œ๋ฌธ์— ์žฌํƒ๊ทผ๋ฌด๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ธฐ์—…๋“ค์ด ์ ์ฐจ ๋Š˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ ์ง‘์‚ฌ๋žŒ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ธ๋ฐ์š”. ์ฃผ๋ง์— ์žฌํƒ๊ทผ๋ฌด๋ฅผ ์ค€๋น„ํ•œ๋‹ค๊ณ  ํ•ด์„œ ํšŒ์‚ฌ์—์„œ ๋ฌด์Šจ ์ผ์„ ํ•˜๋Š”์ง€ ์‚ดํŽด๋ดค์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ƒ๊ฐ ์™ธ๋กœ ๋‹จ์ˆœ ๋ฐ˜๋ณต ์—…๋ฌด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๋”๊ตฐ์š”. ํ•œ ์˜ˆ๋กœ, ์—‘์…€์— ์–ด๋–ค ๋ชฉ๋ก์ด ์žˆ์œผ๋ฉด ํ•˜๋‚˜ํ•˜๋‚˜ ์•„์ดํ…œ์„ ์›น ์‚ฌ์ดํŠธ์—์„œ ๊ฒ€์ƒ‰ํ•œ ํ›„ ํŠน์ • ๊ฒฐ๊ณผ ๊ฐ’์„ ๋‹ค์‹œ ์—‘์…€์— ์ž…๋ ฅํ•˜๋Š” ์—…๋ฌด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š”, ์›น ์‚ฌ์ดํŠธ์— ์•„์ดํ…œ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ผ์ผ์ด ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉฐ ์ˆ˜ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๋Š” ์—…๋ฌด๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ง์—…์ด ํ”„๋กœ๊ทธ๋ž˜๋จธ์ธ์ง€๋ผ, ๋’ค์—์„œ ์ง€์ผœ๋ณด๋ฉด์„œ ๋งŽ์ด ์•ˆํƒ€๊นŒ์›Œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง„์ž‘์— ์•Œ๊ฒŒ ๋์œผ๋ฉด ๋งคํฌ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋„ ๋งŒ๋“ค์–ด ์คฌ์„ ํ…๋ฐ ๋ง์ด์ฃ . ๊ฒฐ๊ตญ, ์ด๋ฒˆ ๊ธฐํšŒ์— ํ”„๋กœ๊ทธ๋žจ์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด ์ฃผ๋ฉด์„œ ๋‚ด์‹ฌ ๋ฟŒ๋“ฏํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž, ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” .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#์—์„œ ์…€๋ ˆ๋‹ˆ์›€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ค€๋น„๋‹จ๊ณ„๋ฅผ ๋งˆ์น˜๊ณ , ์ดํ›„ ํฌ์ŠคํŒ…์„ ํ†ตํ•ด ์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

'Programming > Selenium' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์…€๋ ˆ๋‹ˆ์›€/Selenium, C#] ํ…Œ์ด๋ธ”์˜ ์…€ ๋ฐ์ดํ„ฐ ์ทจ๋“ํ•˜๊ธฐ (์˜ˆ์ œ ํฌํ•จ)  (0) 2020.08.21
[์…€๋ ˆ๋‹ˆ์›€/Selenium, C#] ํ…์ŠคํŠธ ๋ฐ•์Šค ์ง€์šฐ๊ธฐ (์˜ˆ์ œ ํฌํ•จ)  (0) 2020.08.09
[์…€๋ ˆ๋‹ˆ์›€/Selenium, C#] ์›น ํŽ˜์ด์ง€์˜ ํ…์ŠคํŠธ ๋ฐ•์Šค ๋ฌธ์ž์—ด ์–ป๊ธฐ(์˜ˆ์ œ ํฌํ•จ)  (0) 2020.08.07
[์…€๋ ˆ๋‹ˆ์›€/Selenium. C#] ์›น ํŽ˜์ด์ง€์˜ ํ…์ŠคํŠธ ๋ฐ•์Šค์— ๋ฌธ์ž์—ด ์ž…๋ ฅํ•˜๊ธฐ (์˜ˆ์ œ ํฌํ•จ)  (0) 2020.08.04
[์…€๋ ˆ๋‹ˆ์›€/Selenium, C#] C#์—์„œ ์…€๋ ˆ๋‹ˆ์›€์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ์ด์ •๋ฆฌ  (2) 2020.08.02
[์…€๋ ˆ๋‹ˆ์›€/Selenium, C#] ์›น ํŽ˜์ด์ง€์˜ ๋ฒ„ํŠผ ํด๋ฆญํ•˜๊ธฐ (์˜ˆ์ œ ํฌํ•จ)  (0) 2020.08.01
[์…€๋ ˆ๋‹ˆ์›€/Selenium, C#] C#์—์„œ Selenium์„ ์ด์šฉํ•œ ๋„ค์ด๋ฒ„ ์ž๋™ ๋กœ๊ทธ์ธ ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ (์˜ˆ์ œ ํฌํ•จ)  (8) 2020.03.24