1. 웹 페이지 열기: 첫걸음
웹 페이지의 지배자가 되고 싶었던 적 있어? 그렇다면 이 강의가 바로 너를 위한거야. 오늘은 Selenium을 사용해 웹 페이지를 열고 그것들과 상호작용하는 방법을 배울거야. 마치 인터넷이라는 오케스트라와 Python 코드라는 악보로 브라우저를 지휘하는 지휘자가 된 것 같은 기분이 들 거야. 시작해 보자!
웹 페이지와 상호작용하기 전에, 우선 페이지를 열어야겠지? 마치 도서관에 가서 책을 찾기 전에 들어가야 하는 것처럼 말이야. Selenium에서는 브라우저 드라이버를 사용해 웹 페이지를 열 수 있어. 지금은 이미 Selenium과 적절한 웹 드라이버(예: ChromeDriver나 GeckoDriver)가 설치되어있다고 가정하고 진행할게. 이전 강의를 들었다면 이미 이 방법을 알고 있을 거야. 그렇지 않다면 돌아가서 다시 한번 읽어봐.
간단히 웹 페이지 여는 것부터 시작해 보자:
from selenium import webdriver
# Chrome용 웹 드라이버 인스턴스 생성
driver = webdriver.Chrome()
# 웹 페이지 열기
driver.get('https://www.example.com')
# 페이지 제목을 콘솔에 출력
print(driver.title)
# 브라우저 닫기
driver.quit()
코드에서 일어나는 일:
- webdriver 임포트: Selenium의 핵심으로, 브라우저를 제어할 수 있게 해줘.
- 드라이버 생성: 여기서 Chrome용 드라이버 객체를 생성해. 이건 설치된 드라이버에 따라 다른 브라우저일 수 있어.
- 페이지 열기:
get()
메서드는 지정된 URL의 페이지를 로드해. - 페이지 제목 가져오기:
driver.title
을 사용하여 현재 페이지의 제목을 출력할 수 있어. - 브라우저 닫기:
quit()
메서드는 브라우저와의 작업을 종료해.
이제 첫 번째 웹 페이지를 열었어! 세상을 지배하기 위한 첫걸음... 음... 아니, 자동화를 위한 첫걸음이지!
2. 탐색 및 탭 작업
단순히 페이지를 열기만 해서는 부족하지. 종종 페이지 간 이동하거나 여러 탭을 열어야 해. 마치 여러 곳을 순간 이동할 수 있는 여행자처럼 말이야. Selenium에서는 가능해.
페이지 간 이동
한 페이지에서 다른 페이지로 넘어가는 것은 페이지를 여는 것만큼 간단해:
# 다른 페이지로 이동
driver.get('https://www.example.org')
# back() 메서드를 사용하여 이전 페이지로 돌아가기
driver.back()
# forward() 메서드를 사용하여 앞으로 가기
driver.forward()
탭 작업
새 탭을 여는 건 어때? 이건 마치 여러 도시의 도서관에서 노트북을 사용하는 것 같지!
# 새로운 탭을 열고 전환
driver.execute_script("window.open('https://www.example.com', '_blank');")
driver.switch_to.window(driver.window_handles[1])
# 첫 번째 탭으로 돌아가기
driver.switch_to.window(driver.window_handles[0])
설명:
-
execute_script()
: 브라우저에서 JavaScript 코드를 실행하는 데 사용해. 여기서 새로운 탭을 열어. -
switch_to.window()
: 이 메서드는 탭 간 전환을 가능케 해줘.window_handles
를 사용해 모든 열린 탭의 리스트에 접근해.
3. 웹 페이지와의 상호작용
이제 페이지를 열고 탐색하는 법을 배웠으니, 직접 상호작용하는 법을 배워보자 — 진정한 프로그래머처럼! 마치 각 웹 페이지와 춤을 추는 것처럼, 그리고 그것을 능숙하게 해내는 거야.
상호작용 인터페이스
예를 들어, 텍스트 입력 상자를 찾아서 텍스트를 입력하는 과정을 살펴보자:
# 요소를 이름으로 찾기
search_box = driver.find_element_by_name('q')
# 찾은 텍스트 상자에 텍스트 입력
search_box.send_keys('Selenium Python')
# 검색 버튼을 찾아 클릭
submit_button = driver.find_element_by_name('btnK')
submit_button.click()
설명:
-
find_element_by_name()
: 이름으로 요소를 찾는 데 사용하는 메서드야. 여기서는 검색 텍스트 상자를 찾아. -
send_keys()
: 찾은 요소에 텍스트를 입력할 수 있어. -
click()
: 요소를 클릭하는 동작을 시뮬레이션해, 예를 들어 버튼을 클릭하는 식으로.
추가 메서드
더 복잡한 요소 상호작용을 위해 다양한 메서드가 존재해. Selenium 문서를 살펴보면서 더 깊이 있는 공부를 해봐. 여기에선 몇 가지 기본적인 걸 다뤄 볼게.
-
find_element_by_id()
: ID로 요소를 찾아. -
find_element_by_class_name()
: 클래스 이름으로 요소를 찾아. -
find_element_by_css_selector()
: CSS 선택자를 사용해 검색해.
이제 진정한 웹 탐험가처럼 페이지를 열고 탐험할 수 있어! 실험하고, 새로운 걸 시도해 보는 걸 두려워하지 마. "실수는 성공으로 가는 계단"이라고 하잖아, 특히 코드가 신뢰할 수 있고 잘 테스트된 경우에는 더더욱!
자주 하는 실수
Selenium과 작업하는 건, 기본적인 함정을 모르면 마치 지뢰밭을 걷는 것 같아. 가장 흔한 실수 중 하나는 브라우저 세션을 제대로 종료하지 않는 거야. 이러면 메모리에서 브라우저 프로세스가 멈춰버릴 수 있어. 스크립트의 끝에서 항상 driver.quit()
를 사용해.
Selenium에서 프로그래머를 괴롭히는 다른 점은 웹 페이지 구조의 변경이야. 요소가 선택자로 발견됐는데, 웹사이트 개발자가 HTML 구조를 바꾸면, 스크립트가 갑자기 작동을 멈춰버릴 수 있어. 마치 방에 들어가려고 하는데 갑자기 문이 닫힌 것처럼. 유연한 코드를 작성하고, 사이트의 변경 사항에 맞게 정기적으로 업데이트하는 게 중요해.
GO TO FULL VERSION