λ°˜μ‘ν˜•

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

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

 

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

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

luckygg.tistory.com

이번 ν¬μŠ€νŒ…μ—μ„œλŠ” μ‹€μ œ μ…€λ ˆλ‹ˆμ›€ 라이브러리λ₯Ό μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λŠ”μ§€ μ˜ˆμ‹œλ₯Ό 톡해 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

넀이버 μžλ™ 둜그인 λ§Œλ“€κΈ°

넀이버 μžλ™ 둜그인 ν”„λ‘œκ·Έλž¨μ„ μ˜ˆμ‹œλ‘œ λ§Œλ“€μ–΄ λ³΄κ² μŠ΅λ‹ˆλ‹€. μš°μ„ , μ‚¬λžŒμ΄ μž‘μ—…ν•œλ‹€λ©΄ μ•„λž˜μ™€ 같은 수순으둜 μˆ˜ν–‰ν•  κ²ƒμž…λ‹ˆλ‹€.

β‘  λ„€μ΄λ²„에 μ ‘속.
β‘‘ λ‘œκ·ΈμΈ λ²„νŠΌ ν΄λ¦­.
β‘’ μ•„이디 λ° λΉ„λ°€λ²ˆν˜Έ μž…λ ₯.
β‘£ λ‘œκ·ΈμΈ λ²„νŠΌ ν΄λ¦­.

λ§ˆμ°¬κ°€μ§€λ‘œ ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λ €λ©΄ λ™μΌν•œ 절차의 XPath 정보(λ˜λŠ” Class name, Tag λ“± μƒκ΄€μ—†μŠ΅λ‹ˆλ‹€)κ°€ ν•„μš”ν•©λ‹ˆλ‹€. ν¬λ‘¬μ—μ„œ 넀이버에 μ ‘μ†ν•˜κ³  F12λ₯Ό 눌러 μœ„ μ ˆμ°¨λŒ€λ‘œμ˜ XPathλ₯Ό 취득해 λ΄€μŠ΅λ‹ˆλ‹€.

둜그인 λ²„νŠΌ: //*[@id="account"]/div/a/i
아이디 μž…λ ₯: //*[@id="id"]
λΉ„λ°€λ²ˆν˜Έ μž…λ ₯: //*[@id="pw"]
둜그인 λ²„νŠΌ: //*[@id="log.login"]

이제 C# 예제 ν”„λ‘œκ·Έλž¨μ—μ„œ μ§„ν–‰ν•˜κ² μŠ΅λ‹ˆλ‹€. μ•„λž˜μ™€ 같이 μ•„μ£Ό κ°„λ‹¨ν•˜κ²Œ 둜그인 폼을 μƒμ„±ν–ˆμŠ΅λ‹ˆλ‹€.

UI μ˜ˆμ‹œ

그리고 λ„€μž„μŠ€νŽ˜μ΄μŠ€ μ„ μ–Έκ³Ό Chrome을 μ΄μš©ν•˜κΈ° μœ„ν•œ 각쒅 객체듀을 μ •μ˜ν•©λ‹ˆλ‹€.

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;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;

namespace ExamSelenium
{
    public partial class Form1 : Form
    {
        protected ChromeDriverService _driverService = null;
        protected ChromeOptions _options = null;
        protected ChromeDriver _driver = null;

        public Form1()
        {
            InitializeComponent();

            _driverService = ChromeDriverService.CreateDefaultService();
            _driverService.HideCommandPromptWindow = true;

            _options = new ChromeOptions();
            _options.AddArgument("disable-gpu");
        }
    }
}

λ‹€μŒμœΌλ‘œ '둜그인' λ²„νŠΌμ˜ μ΄λ²€νŠΈμ—λŠ” μ•„λž˜μ™€ 같이 κ΅¬ν˜„ν•©λ‹ˆλ‹€. 

private void buttonLogin_Click(object sender, EventArgs e)
{
	string caption = buttonLogin.Text;

	if (caption == "둜그인")
	{
		string id = textBoxID.Text;
		string pw = textBoxPW.Text;

		if (checkBoxIsShow.Checked == false)
			_options.AddArgument("headless"); // 창을 μˆ¨κΈ°λŠ” μ˜΅μ…˜μž…λ‹ˆλ‹€.

		_driver = new ChromeDriver(_driverService, _options);

		_driver.Navigate().GoToUrl("https://www.naver.com"); // μ›Ή μ‚¬μ΄νŠΈμ— μ ‘μ†ν•©λ‹ˆλ‹€.

		_driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);

		var element = _driver.FindElementByXPath("//*[@id='account']/div/a/i");
		element.Click();

		Thread.Sleep(3000);

		element = _driver.FindElementByXPath("//*[@id='id']");
		element.SendKeys(id);

		element = _driver.FindElementByXPath("//*[@id='pw']");
		element.SendKeys(pw);

		element = _driver.FindElementByXPath("//*[@id='log.login']");
		element.Click();

		buttonLogin.Text = "λ‘œκ·Έμ•„μ›ƒ";
	}
	else
	{
		_driver.Quit();

		buttonLogin.Text = "둜그인";
	}
}

ν•œ 가지 μ£Όμ˜μ‚¬ν•­μ΄ μžˆμŠ΅λ‹ˆλ‹€. λΉ λ₯΄κ²Œ μ›Ή μ‚¬μ΄νŠΈ μ œμ–΄λ₯Ό μ‹œλ„ν•  경우, μ›Ή νŽ˜μ΄μ§€ λ‹€μš΄λ‘œλ“œκ°€ λλ‚˜μ§€λ„ μ•Šμ•˜λŠ”λ° μ œμ–΄ν•˜λŠ” κ²½μš°κ°€ λ°œμƒν•©λ‹ˆλ‹€. 이 경우 Exception 으둜 λΉ μ§€κ²Œ λ©λ‹ˆλ‹€. 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ μœ„ μ˜ˆμ œμ—λ„ ν¬ν•¨λ˜μ–΄ μžˆλŠ” Implicitwait μ„€μ •μ΄λ‚˜ WebDriverWait 객체λ₯Ό μ‚¬μš©ν•˜μ—¬ 지연 μ‹œκ°„μ„ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ κ²½ν—˜μƒ μ›Ή νŽ˜μ΄μ§€κ°€ λ‹€μš΄λ‘œλ“œλ˜μ§€ μ•Šμ•˜λŠ”λ°λ„ μ‹œλ„ν•˜λ”κ΅°μš”. κ·Έλž˜μ„œ μ €λŠ” μ•„μ‰½μ§€λ§Œ Thread.Sleep() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 

μ§€κΈˆκΉŒμ§€μ˜ μ˜ˆμ‹œ μ½”λ“œλŠ” 정말 κ°„λ‹¨ν•œ λ‚΄μš©μž…λ‹ˆλ‹€. 업무 μžλ™ν™”λ₯Ό μœ„ν•œ 경우, μˆ˜μž‘μ—…μœΌλ‘œ ν•˜λ˜ λ‚΄μš©μ„ μœ„ μ˜ˆμ‹œμ²˜λŸΌ XPathλ‚˜ Tag λ“±μ˜ 정보λ₯Ό μ–»κ³  정상 λ™μž‘ν•˜λŠ”μ§€ 일일이 확인해야 ν•©λ‹ˆλ‹€. 그리고 νŒμ—… 창이 ν‘œμ‹œλœλ‹€λ“ κ°€, μ—λŸ¬κ°€ λ°œμƒν•œ 경우의 μ˜ˆμ™Έμ²˜λ¦¬λŠ” μ–΄λ–»κ²Œ 할지 λ“±μ˜ μ‹œλ‚˜λ¦¬μ˜€λ„ ꡬ상해야 ν•©λ‹ˆλ‹€.

무엇보닀도 ν…ŒμŠ€νŠΈ 쀑에 λΉ λ₯Έ μ›Ήμ‚¬μ΄νŠΈ μ œμ–΄λ‘œ ν•΄λ‹Ή μ‚¬μ΄νŠΈμ˜ μ„œλ²„μ— 뢀담이 λ˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€. μ²¨λΆ€λœ 예제 μ½”λ“œμ—λŠ” μš©λŸ‰ 문제둜 Selenium dll듀을 μ œκ±°ν–ˆμŠ΅λ‹ˆλ‹€.

ExamSelenium.zip
0.01MB

λ°˜μ‘ν˜•