본문 바로가기
programming/WebAutomation

selenium / 셀레니움 사용법 크롤링과 스크래핑 자동화를 위한 단계

by 개코 - 개발과 코딩 2024. 2. 14.

웹페이지를 자동화하는데 셀레니움 ( selenium ) 은 강력한 도구이다. 웹페이지에 표시된 모든 요소에 접근이 가능하며, 자동화를 통해 크롤링과 스크래핑이 가능하다. 그렇기에 자동화를 위한 8가지의 단계가 필요하다. 단계는 줄어들 수도 있고, 늘어날 수도 있다. 또한, 웹페이지가 로딩되는 시간을 고려한 대기전략은 중요하다. 지금의 웹페이지들은 동적이며, 가변적이기에 셀레니움을 사용하더라도 고려해야 할 내용들이 많다. 다만, 웹페이지의 경고문구는 잘 살펴보자. 도구는 강력하지만, 도구를 사용하는 사용자의 책임도 존재한다.

셀레니움 웹 자동화 8단계

selenium 셀레니움 사용법
크롤링 자동화를 위한 단계

셀레니움 ( selenium ) 은 웹 애플리케이션를 자동으로 테스트하는 툴이다.
엄연히 툴이지만, 크롤링과 스크래핑에도 많이 이용된다.
( 이 부분은 조심하도록 하자. 셀레니움의 기능은 막강하지만, 책임은 사용자에 있다. )
그도 그럴것이 자동화 테스트를 하려면 html 요소에 접근하고 읽기 ( Get ), 쓰기 ( Set ) 을 할 수 있어야 한다.
셀리니움은 이런 자동화 테스트를 위한 기능에 충실하다.
( 이 기능이 막강하지만, 보안툴 등에 막힐 수 있으니 참고하자. )
어쨌든 셀레니움을 통해 웹을 자동화하고 테스트하고 데이터를 수집하는 크롤링과 스크래핑을 위한 단계가 있다.
솔직히 단계라 말하지만, 메뉴얼보면 다 나오는 내용들이며, 공식 홈페이지 ( https://www.selenium.dev/ ) 를 방문하여 코드 몇 줄 작성해 보면 이해가 쉽다.
더욱이 테스트 할 수 있는 웹페이지 ( https://www.selenium.dev/selenium/web/web-form.html ) 도 제공해 주고 있으니 연습하기 좋다.

8가지 단계

셀레니움 ( Selenium ) 을 사용하는 방법은 간단할 수도 있지만, 처음 접해본다면 자동으로 웹브라우저가 나타나고 원하는 페이지로 이동하며 버튼과 텍스트를 입력하는 모습이 신기할 수 있다.
웹자동화라고 하면 단순히 크롤링이나 스크래핑을 생각할 수도 있지만, 타겟이 되는 url 과 웹페이지가 있어야 가능하다.
이러한 일련의 과정은 당연히 서버의 부하가 생길 수 있기에 작업에 여유를 가질 필요가 있다.
( 특정 웹사이트의 경우 이러한 툴들을 이용하는 것에 금지하는 경우도 있으니 참고하자. 걸리면 본인 책임이다. )

그럼에도 셀레니움의 기능은 막강하며, 접해보고자 하는 이들은 많을 것이다.
프로그램은 파이썬, C#, Java 등을 사용할 수 있으며, 자신이 할 수 있는 것으로 시작하면 된다.

아래는 셀레니움을 이용하여 웹을 자동화하는 단계를 보여준다.

  1. 웹드라이버를 생성하여 세션을 시작한다.
  2. 크롤링 자동화를 위한 url 로 이동한다.
  3. 웹브라우저에 나타난 페이지의 정보를 요청한다.
  4. 대기전략를 정한다.
  5. 요소를 찾는다.
  6. 요소에 대한 작업을 수행한다.
  7. 요소의 값 읽기 ( Get ) , 쓰기 ( Set )
  8. 드라이버의 세션을 종료한다.

기본 코드 보기

아래는 셀레니움 ( Selenium ) 홈페이지에 게재된 C# 코드이다.
위에서 언급한 8단계의 과정을 그대로 따르고 있다.
웹 자동화를 위한 기본적인 단계이며, C# 코드를 기준으로 한다.
공식 홈페이지에서는 파이썬과 자바, 루비 등 여러가지가 있다.
아래는 C# 을 이용한 셀레니움을 이용한 기본적인 코드이다.

/* 1.세션 시작. */
IWebDriver driver = new ChromeDriver();

/* 2. 브라우저에서 작업 수행. */
driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/web-form.html");

/* 3. 브라우저 정보 요청. */
var title = driver.Title;

/* 4. 대기 전략 수립. */
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);

/* 5. 요소 찾기. */
var textBox = driver.FindElement(By.Name("my-text"));
var submitButton = driver.FindElement(By.TagName("button"));

/* 6. 요소에 대한 작업 수행. */
textBox.SendKeys("Selenium");
submitButton.Click();

/* 7. 요소 값 가져오기. */
var message = driver.FindElement(By.Id("message"));
var value = message.Text;

/* 8. 세션 종료. */
driver.Quit();
반응형

댓글