Selenium은 웹 브라우저를 자동으로 조작할 수 있는 강력한 도구다. 이를 통해 로그인 자동화, 특정 버튼 클릭, 드롭다운 메뉴 조작 등 다양한 작업을 수행할 수 있다. Selenium을 활용한 브라우저 제어 방법을 정리한다.
1. 브라우저 제어의 필요성
브라우저를 제어해야 하는 이유는 여러 가지가 있다.
- 로그인 자동화: 로그인 후에만 접근할 수 있는 페이지를 분석할 때 필요하다.
- ID와 비밀번호 입력 후 로그인 버튼 클릭 또는 엔터키 입력
- 드롭다운 버튼 조작: 특정 요소를 가져오기 위해 드롭다운 버튼을 클릭해야 하는 경우가 있다.
- 드롭다운 버튼을 찾아서 클릭
이러한 작업을 가능하게 하는 것이 Selenium이다.
2. 브라우저 로딩 기다리기
웹 페이지는 로딩 시간이 필요하다. 요소가 로딩되지 않은 상태에서 크롤링을 시도하면 오류가 발생할 수 있다. 이를 방지하기 위해 브라우저가 로딩될 때까지 기다리는 방법이 필요하다.
Point I: time.sleep(n) – 무조건 기다리기
import time
with webdriver.Firefox() as driver:
driver.get(url) # 웹페이지 로딩
time.sleep(10) # 10초간 기다리기
e = driver.find_element()
- time.sleep(n): n초 동안 무조건 기다린다.
- 요소가 이미 로딩되었더라도 설정된 시간을 다 채울 때까지 대기한다.
Point II: implicitly_wait(n) – 암시적 기다리기
with webdriver.Firefox() as driver:
driver.implicitly_wait(10)
driver.get(url) # 웹 페이지 로딩
e = driver.find_element()
- implicitly_wait(n): 요소가 로딩될 때까지 최대 n초 동안 기다린다.
- 요소가 로딩되면 즉시 기다림을 종료하고 코드를 실행한다.
- 한 번 설정하면 해당 브라우저 세션에서 계속 적용된다.
Point III: presence_of_element_located – 명시적 기다리기
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
with webdriver.Firefox() as driver:
driver.implicitly_wait(10)
driver.get(url) # 웹 페이지 로딩
e = WebDriverWait(driver, 30).until(
EC.presence_of_element_located((By.ID, "id_name"))
) # 해당 요소를 불러올 때까지 30초 기다림
- presence_of_element_located: 특정 요소가 로딩될 때까지 최대 n초 동안 기다린다.
- 요소는 ID, class_name, xpath 등 다양한 방식으로 찾을 수 있다.
- element_to_be_clickable: 요소가 클릭 가능할 때까지 기다릴 수도 있다.
3. 키보드 및 마우스 입력
Selenium을 이용하면 키보드와 마우스를 자동으로 조작할 수 있다.
Point I: 키보드 입력
from selenium.webdriver.common.keys import Keys
# ID 입력
driver.find_element_by_xpath('//*[@id="id"]').send_keys('my_id')
# 비밀번호 입력 후 엔터
driver.find_element_by_xpath('//*[@id="pw"]').send_keys('my_password' + Keys.ENTER)
- send_keys: 해당 요소에 문자열을 입력한다.
- Keys: ENTER, SHIFT, CONTROL 등 특수 키를 입력할 때 사용한다.
Point II: 마우스 입력
# 로그인 버튼 클릭
driver.find_element_by_xpath('//*[@id="log.login"]').click()
- click(): 요소를 클릭하는 효과를 낸다.
4. 다양한 입력 및 Action Chains
Selenium 기본 입력 방식에는 한계가 있다. 여러 요소에 대한 연속적인 입력이나 복잡한 마우스 조작을 하려면 Action Chains를 사용해야 한다.
Point I: Action Chains 개념
- 여러 개의 액션을 체인처럼 연결하여 실행할 수 있다.
- 키보드 및 마우스를 보다 정밀하게 조작할 수 있다.
Point II: 키보드 입력 (ActionChains 활용)
from selenium.webdriver.common.action_chains import ActionChains
# 요소 찾기
_id = driver.find_element_by_xpath('//*[@id="id"]')
_pw = driver.find_element_by_xpath('//*[@id="pw"]')
# 액션 수행
webdriver.ActionChains(driver) \
.send_keys_to_element(_id, 'my_id') \
.send_keys_to_element(_pw, 'my_pw') \
.send_keys(Keys.ENTER) \
.perform()
- send_keys_to_element: 특정 요소에 키 입력을 수행한다.
- perform(): 설정한 액션을 실행한다.
Point III: 다양한 Action Chains 조합
컨트롤 + 클릭
_button = driver.find_element_by_xpath('//button')
chains = webdriver.ActionChains(driver)
chains.key_down(Keys.CONTROL) # 컨트롤 버튼 누른 채로
chains.click(_button) # 버튼 클릭
chains.perform()
- key_down(Keys.CONTROL): 컨트롤 키를 누른다.
- click(_button): 버튼을 클릭한다.
마우스 이동 및 대기 후 이동
_button = driver.find_element_by_xpath('//button')
chains = webdriver.ActionChains(driver)
chains.move_to_element(_button) \
.pause(3) \
.move_by_offset(100, 100) \
.perform()
- move_to_element: 특정 요소 위로 마우스를 이동시킨다.
- pause(n): n초 동안 멈춘다.
- move_by_offset(x, y): 현재 위치에서 (x, y)만큼 이동한다.
마무리
Selenium을 활용하면 브라우저를 자동으로 제어하고, 로그인 자동화, 버튼 클릭, 키보드 및 마우스 입력 등을 쉽게 수행할 수 있다.
- 요소가 로딩될 때까지 기다리는 방법에는 무조건 기다리기(time.sleep), 암시적 기다리기(implicitly_wait), 명시적 기다리기(WebDriverWait) 가 있다.
- 키보드 및 마우스 입력을 통해 로그인 및 다양한 조작이 가능하다.
- Action Chains를 활용하면 더 복잡한 액션도 수행할 수 있다.
이제 Selenium을 활용한 크롤링을 더욱 효과적으로 수행할 수 있을 것이다! 🚀
'AI Study' 카테고리의 다른 글
| 인공지능 머신러닝, 어떻게 시작할까? (1) | 2025.03.22 |
|---|---|
| 머신러닝과 데이터 과학에 대한 이해 (0) | 2025.03.22 |
| 빅데이터와 AI: 데이터가 AI 발전에 중요한 이유 (2) | 2025.03.19 |
| Python, Pandas, NumPy 문법 비교 및 데이터 분석 필수 문법 정리 (0) | 2025.03.19 |
| 파이썬 크롤링_ Selenium 활용(1) (0) | 2025.03.09 |