Selenium은 웹 브라우저를 자동화하는 강력한 도구로, 다양한 웹 테스트와 데이터 스크래핑 작업에 널리 사용됩니다. 이 글에서는 Python과 Selenium을 사용하여 웹 브라우저를 자동화하는 방법에 대해 다룹니다.
당근마켓, 중고나라 등등 여러 웹사이트 데이터를 가져오는데 자주 사용하는 셀레니움입니다 ㅎㅎ
제 경험에 의하면 외주개발을 하거나 자동화 프로그램을 개발할때 자주 사용하는 selenium입니다 !
1. Selenium 설치하기 (feat. pip 설치)
먼저, Selenium 모듈과 웹 브라우저 자동화에 필요한 웹드라이버를 설치해야 합니다.
pip install selenium
웹드라이버는 브라우저와 Selenium 간의 통신을 도와주는 프로그램입니다. 사용 중인 브라우저에 맞는 드라이버를 설치해야 합니다. 예를 들어, Chrome의 경우 ChromeDriver를 다운로드한 후 해당 경로를 환경 변수에 추가합니다.
2. 기본 설정과 브라우저 열기
웹드라이버 설치 후에는 Selenium을 사용해 브라우저를 열고 웹 페이지에 접속할 수 있습니다. 다음은 Chrome 브라우저를 여는 기본 코드입니다.
from selenium import webdriver
# ChromeDriver 경로를 지정합니다.
driver = webdriver.Chrome(executable_path='path/to/chromedriver')
driver.get('https://www.example.com') # 원하는 URL로 이동합니다.
위 코드에서 executable_path
에 ChromeDriver의 경로를 입력합니다. driver.get()
메서드를 사용하여 원하는 URL로 이동할 수 있습니다.
3. 웹 요소 찾기
Selenium은 다양한 방식으로 웹 요소를 찾을 수 있습니다. 아래는 대표적인 메서드들입니다.
find_element_by_id
: ID로 요소 찾기find_element_by_name
: Name 속성으로 요소 찾기find_element_by_class_name
: 클래스 이름으로 요소 찾기find_element_by_tag_name
: 태그 이름으로 요소 찾기find_element_by_css_selector
: CSS 선택자로 요소 찾기find_element_by_xpath
: Xpath로 요소 찾기
예를 들어, ID로 특정 버튼을 찾고 클릭하려면 다음과 같은 코드를 사용할 수 있습니다.
button = driver.find_element_by_id('submit-button')
button.click()
4. 텍스트 입력 및 버튼 클릭
웹 자동화의 핵심 작업 중 하나는 텍스트 필드에 값을 입력하고 버튼을 클릭하는 것입니다. Selenium에서는 send_keys
메서드를 사용하여 텍스트를 입력하고, click
메서드로 버튼을 클릭할 수 있습니다.
# 텍스트 필드에 값 입력
input_field = driver.find_element_by_name('username')
input_field.send_keys('my_username')
# 버튼 클릭
login_button = driver.find_element_by_xpath('//button[@type="submit"]')
login_button.click()
5. 대기(Wait) 사용하기
웹 페이지가 로드되기까지 시간이 걸릴 수 있습니다. Selenium에서는 implicitly_wait
, WebDriverWait
과 같은 대기 메서드를 제공합니다.
implicitly_wait
: 전역적으로 대기 시간을 설정합니다.WebDriverWait
: 특정 조건이 충족될 때까지 대기합니다.
다음은 요소가 나타날 때까지 기다리는 예제입니다.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 최대 10초 동안 기다림
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, 'my-element'))
)
6. 스크린샷 캡처
웹 자동화 도중 특정 상태에서 현재 페이지 스크린샷을 저장하고 싶을 때 save_screenshot
메서드를 사용할 수 있습니다.
driver.save_screenshot('screenshot.png')
7. 브라우저 종료
작업이 끝나면 브라우저를 종료하여 자원을 해제해야 합니다. close()
와 quit()
메서드가 있으며, close()
는 현재 탭만 닫고 quit()
는 모든 탭을 닫고 드라이버를 종료합니다.
driver.quit()
예제: 로그인 자동화
아래는 로그인 페이지에서 아이디와 비밀번호를 입력하고 로그인 버튼을 클릭하는 예제입니다.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
try:
# 페이지 이동
driver.get('https://www.example.com/login')
# 아이디 및 비밀번호 입력
driver.find_element_by_name('username').send_keys('your_username')
driver.find_element_by_name('password').send_keys('your_password')
# 로그인 버튼 클릭
driver.find_element_by_xpath('//button[@type="submit"]').click()
# 로그인 후 대기
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'dashboard')))
print("로그인 성공")
except Exception as e:
print("오류 발생:", e)
finally:
driver.quit()
마무리
이 글에서는 Python과 Selenium을 사용하여 웹 자동화의 기본적인 작업을 다루었습니다. Selenium은 웹 애플리케이션의 테스트나 데이터 수집에 매우 유용한 도구입니다. 다양한 방법으로 웹 요소를 찾고 조작할 수 있으며, Selenium의 강력한 기능을 통해 여러분의 웹 자동화 작업을 더욱 쉽게 수행할 수 있습니다.
Selenium은 지속적으로 업데이트되며, 다양한 웹드라이버와 호환됩니다. 공식 문서를 참고하여 필요한 기능을 더 깊이 탐구해 보세요.
제가 개발할때 직접 자주 사용하는 selenium library에 대한 소개였습니다 : )
참고 자료: