본문 바로가기
  • 시 쓰는 개발자
1일 1개념정리 (24년 8월~)/테스팅 , SW공학개론

1일1개 (44) - 셀레니움

by poetDeveloper 2024. 9. 28.
반응형

1일 1개념정리 24.08.09.금 ~ 

 

큰 결정에 큰 동기가 따르지 않을 때도 있다. 하지만 큰 결심이 따라야 이뤄낼 수 있다.

무조건 무조건 1일 1개의 개념 정리하기 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!


#44. 셀레니움 ( Selenium )

이름부터 무슨 RPG게임의 던전 이름같은 셀레니움.... 약간 메이플스토리에서 볼법하다. 이건 무엇인가 ? 이것은 웹에서 자동화할 때 쓰는 도구이다. 무엇을? 바로 웹 페이지 탐색, 클릭, 폼 제출 등을 자동화할 수 있다. 그래서 웹페이지 상에서 테스트할 때 이용할 수 있다. 특히 크롤링할 때 사용한다고 이해하면 쉽다. 오늘은 셀레니움에 대해 알아보자.

 

셀레니움

셀레니움은 특히 웹페이지 상에서 테스트할 때 사용할 수 있다. 예를 들어, 배포하고 페이지에서 특정 작업이 잘 이루어지는지 확인할 때 이용할 수 있다.

ex) 로그인 버튼 누르기, 페이지 이동하기 등

특히 크롬 브라우저에서 호환할 수 있게 라이브러리까지 있으니 얼마나 대단한가 !! 그래서 프론트엔드상에서 기능 테스트나 웹 스크래핑 작업할 때 자주 사용된다. 

from webdriver_manager.chrome import ChromeDriverManager # 크롬 드라이버 설치하기

 

셀레니움은 어떤 때에 사용할까?

  • 웹 브라우저 자동화 : 웹 페이지에 대한 자동화된 상호작용 수행
  • 크로스 브라우저 테스트 : 여러 종류의 브라우저에서 테스트를 실행
  • 웹 페이지 요소 조작 : HTML 요소(버튼, 입력 필드 등)를 찾아서 조작 가능
  • 스크래핑 : API가 없는 웹사이트에서 데이터를 수집하는 데 사용 가능

셀레니움 자동화를 잘 쓴다면 반복적인 업무를 잘 처리할 수 있다. 예를 들면 자동 로그인, 메일 보내기, 인스타그램 자동 좋아요 등 .... 이렇게 보니 매크로 같기도 하고 ??

 

예제코드로 실험하기

그럼 셀레니움을 한번 가볍게 써보자. 크롬에서 검색을 자동으로 해보자. 내 블로그를 구글에 검색하여 결과를 가져오는 코드를 짜보겠다.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
import time

# 웹드라이버 설정
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

# 구글 페이지로 이동
driver.get("https://www.google.com")

# 검색창 찾기
search_box = driver.find_element(By.NAME, "q")

# 검색어 입력 및 엔터키 입력
search_box.send_keys("100원짜리 개발자")
search_box.send_keys(Keys.RETURN)

# 몇 초 대기 (결과 로딩 대기)
time.sleep(3)

# 검색 결과 가져오기 (제목과 링크)
results = driver.find_elements(By.CSS_SELECTOR, 'div.g')

# 검색 결과 출력
for index, result in enumerate(results, start=1):
    title_element = result.find_element(By.TAG_NAME, "h3")
    try:
        link_element = result.find_element(By.TAG_NAME, "a")
        link = link_element.get_attribute('href')
        title = title_element.text
        print(f"{index}. 제목: {title}\n   링크: {link}\n")
    except Exception as e:
        continue

# 브라우저 닫기
driver.quit()

 

결과는 어떨까 ?? 두구두구두구두구 ~~~

 

이런식으로 아무것도 건들지 않고 자동으로 검색하고 결과를 가져온다 !!! 지금은 format을 그냥 제목, 링크정도로만 맞췄지만 여기서 내가 원하는 키워드를 더 자세하게 가져온다면 크롤링하여 데이터만 뽑아낼 때 용이할 것이다.

 

그리고 지금 화면상으로는 pycharm밖에 안보이는데 .... 화면설정을 파이참만 보이게 해놔서 그런 것 같다. 실제로는 아래와 같이 크롬창이 하나 뜨면서 홈화면-글자타이핑-검색 이런 flow가 그대로 흘러가게 된다. wow !!

 

반응형