웹 브라우저를 자동으로 제어하고 싶으신가요? 반복적인 웹 작업을 자동화하거나 웹 스크래핑을 효율적으로 수행하고 싶다면, Python과 Selenium의 조합이 최적의 선택입니다. 이 글에서는 Selenium의 기본 개념부터 실제 활용 방법까지 상세히 알아보겠습니다.

1. Python과 Selenium 소개
Selenium은 웹 브라우저를 프로그래밍 방식으로 제어할 수 있게 해주는 강력한 도구입니다. 주로 다음과 같은 용도로 사용됩니다:
- 웹 애플리케이션 테스트 자동화
- 웹 스크래핑 및 데이터 수집
- 반복적인 웹 작업 자동화
- 웹 기반 보고서 자동 생성
Python은 간결한 문법과 풍부한 라이브러리로 Selenium을 더욱 효과적으로 활용할 수 있게 해줍니다. Python의 가독성 높은 코드와 Selenium의 강력한 기능이 만나 웹 자동화의 진입 장벽을 크게 낮춰줍니다.
2. 개발 환경 구성하기
Selenium을 사용하기 위해서는 다음과 같은 준비가 필요합니다:
2.1 Python 설치
먼저 Python 공식 웹사이트에서 최신 버전의 Python을 다운로드하여 설치합니다.
2.2 Selenium 라이브러리 설치
터미널 또는 명령 프롬프트에서 pip를 사용하여 Selenium을 설치합니다:
pip install selenium
2.3 웹 드라이버 설치
Selenium은 웹 드라이버를 통해 브라우저와 통신합니다. 사용하려는 브라우저에 맞는 웹 드라이버를 다운로드해야 합니다:
- Chrome: ChromeDriver
- Firefox: GeckoDriver
- Edge: EdgeDriver
드라이버를 다운로드한 후 시스템 경로에 추가하거나 코드에서 경로를 직접 지정할 수 있습니다.
[드라이브 자동 다운로드 설정 추가]
3. 첫 번째 Selenium 스크립트 작성하기
이제 간단한 예제를 통해 Selenium의 기본 사용법을 알아보겠습니다:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By import time # 웹 드라이버 설정 service = Service('chromedriver의 경로') # 경로 지정 또는 PATH에 추가된 경우 생략 가능 driver = webdriver.Chrome(service=service) # 웹 페이지 열기 driver.get('https://www.google.com') # 페이지 제목 출력 print('페이지 제목:', driver.title) # 검색창 찾기 및 검색어 입력 search_box = driver.find_element(By.NAME, 'q') search_box.send_keys('Python Selenium 튜토리얼') search_box.submit() # 결과 로딩 대기 time.sleep(2) # 검색 결과 페이지 제목 출력 print('검색 결과 페이지 제목:', driver.title) # 브라우저 종료 driver.quit()
이 코드는 Google 홈페이지를 열고, 검색창에 “Python Selenium 튜토리얼”을 입력한 후 검색 결과를 보여줍니다.
4. Selenium의 주요 기능과 사용법
4.1 요소 찾기
웹 페이지에서 요소를 찾는 것은 Selenium 사용의 핵심입니다. 다양한 방법으로 요소를 찾을 수 있습니다:
# ID로 요소 찾기 element = driver.find_element(By.ID, 'elementId') # 클래스 이름으로 요소 찾기 elements = driver.find_elements(By.CLASS_NAME, 'className') # CSS 선택자로 요소 찾기 element = driver.find_element(By.CSS_SELECTOR, 'div.example > p') # XPath로 요소 찾기 element = driver.find_element(By.XPATH, '//button[@name="submit"]') # 링크 텍스트로 요소 찾기 element = driver.find_element(By.LINK_TEXT, '더 알아보기') # 부분 링크 텍스트로 요소 찾기 element = driver.find_element(By.PARTIAL_LINK_TEXT, '알아보기')
4.2 요소와 상호작용하기
요소를 찾은 후에는 다양한 방법으로 상호작용할 수 있습니다:
# 텍스트 입력
element.send_keys('텍스트 입력')
# 요소 클릭
element.click()
# 요소 내용 가져오기
text = element.text
# 속성 값 가져오기
attribute = element.get_attribute('href')
# 폼 제출
element.submit()
# 요소 지우기
element.clear()
4.3 대기 처리
웹 페이지는 비동기적으로 로드되므로, 요소가 준비될 때까지 대기하는 방법이 중요합니다:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 명시적 대기: 특정 조건이 충족될 때까지 대기
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, 'elementId'))
)
# 암시적 대기: 모든 요소 검색에 적용되는 기본 대기 시간 설정
driver.implicitly_wait(10)
4.4 고급 상호작용
더 복잡한 상호작용을 위한 ActionChains 클래스 사용법:
from selenium.webdriver.common.action_chains import ActionChains
# 마우스 오버 동작
element = driver.find_element(By.ID, 'menu')
ActionChains(driver).move_to_element(element).perform()
# 드래그 앤 드롭
source = driver.find_element(By.ID, 'source')
target = driver.find_element(By.ID, 'target')
ActionChains(driver).drag_and_drop(source, target).perform()
# 키보드 조합 사용
from selenium.webdriver.common.keys import Keys
ActionChains(driver).key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform()
5. 실전 예제: 웹 스크래핑
간단한 웹 스크래핑 예제를 통해 Selenium의 활용법을 알아보겠습니다:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 웹 드라이버 설정
service = Service('chromedriver 경로')
driver = webdriver.Chrome(service=service)
# 뉴스 사이트 접속
driver.get('https://news.naver.com/')
# 헤드라인 뉴스 요소들 찾기
wait = WebDriverWait(driver, 10)
headlines = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.main_component .sh_text_headline')))
# 헤드라인 뉴스 제목과 링크 추출
for idx, headline in enumerate(headlines[:5], 1):
title = headline.text
link = headline.get_attribute('href')
print(f"{idx}. 제목: {title}")
print(f" 링크: {link}")
print('-' * 50)
# 브라우저 종료
driver.quit()
6. 주의사항 및 팁
- 웹 드라이버 관리: webdriver-manager 패키지를 사용하면 웹 드라이버를 자동으로 관리할 수 있습니다.
- 헤드리스 모드: UI 없이 백그라운드에서 실행하려면 헤드리스 모드를 사용하세요.
- 에러 처리: 요소를 찾지 못하는 등의 예외 상황에 대한 처리를 추가하세요.
- 성능 최적화: 불필요한 대기 시간을 최소화하고 효율적인 선택자를 사용하세요.
- 웹사이트 이용 정책: 웹사이트의 이용 약관과 robots.txt를 확인하여 합법적으로 사용하세요.
7. 결론
Python과 Selenium의 조합은 웹 자동화의 강력한 도구입니다. 기본 개념부터 시작하여 점차 복잡한 자동화 작업까지 수행할 수 있습니다. 이 가이드를 통해 Selenium의 기초를 다지고, 여러분만의 웹 자동화 프로젝트를 시작해보세요.
웹 자동화는 단순 반복 작업에서 벗어나 더 창의적인 일에 집중할 수 있게 해주는 강력한 도구입니다. 지금 바로 Python과 Selenium으로 여러분의 첫 자동화 스크립트를 작성해보세요!
답글 남기기