1. 페이지 스크롤 자동화
많은 사람들이 익숙하게 사용하는, 하지만 조금은 지치게 만드는 소셜 미디어의 스크롤 방식이 있다. 페이지를 스크롤하면서 콘텐츠가 천천히 로드되는 그런 경험 말이야. 사실 이 마법 같은 스크롤에는 Selenium으로 자동화할 수 있는 API가 있어.
execute_script() 메서드
Selenium의 execute_script() 메서드는 페이지에서 JavaScript 코드를 실행할 수 있게 해주는데, 이건 스크롤 작업을 자동화할 때 정말 강력한 도구야. 이 메서드를 어떻게 활용하는지 알아보자.
from selenium import webdriver
import time
# 브라우저 드라이버 초기화
driver = webdriver.Chrome()
# 대상 페이지 열기
driver.get('https://example.com/scrolling_page')
# 페이지 아래로 스크롤
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3) # 콘텐츠가 로드될 시간을 기다림
# 페이지 위로 스크롤 (다양성을 위해)
driver.execute_script("window.scrollTo(document.body.scrollHeight, 0);")
# 세션 종료
driver.quit()
위 스크립트에서는 window.scrollTo()를 사용해 페이지를 스크롤하고 있어. (0, document.body.scrollHeight) 인자는 페이지의 시작부터 끝까지 스크롤하겠다는 뜻이야. 이 방법은 모든 동적 요소를 완전히 로드하기에 간단하고 효과적이야!
왜 중요한가?
execute_script()를 활용한 스크롤 작업은 처음엔 보이지 않았던 콘텐츠, 예를 들어 무한 스크롤로 표시되는 콘텐츠를 로드할 수 있도록 도와줘. 소셜 미디어 피드나 뉴스피드처럼 동적으로 콘텐츠를 로드하는 경우에 특히 유용해.
2. 링크 이동
이제 스크롤을 배웠으니, 다음으로 넘어가 보자. 링크를 자동으로 클릭하고 이동하는 작업이야. 이건 데이터를 수집할 때, 특히 정보가 여러 페이지에 흩어져 있을 때 정말 중요한 스킬이야.
링크 내비게이션 기본
링크를 클릭하려면 선택한 요소에 click() 메서드를 사용할 수 있어. 간단한 예제를 한번 살펴보자:
from selenium import webdriver
# 브라우저 드라이버 초기화
driver = webdriver.Chrome()
# 대상 페이지 열기
driver.get('https://example.com/links_page')
# 텍스트 기반으로 링크 찾고 클릭
link = driver.find_element_by_link_text('Next Page')
link.click()
# 세션 종료
driver.quit()
이 예제에서는 텍스트 내용을 기반으로 링크를 찾는 작업을 하고 있어. 하지만 텍스트가 고유하지 않을 땐 어떻게 할까? 그럴 땐 find_element_by_xpath()나 find_element_by_css_selector() 같은 더 정확한 방법을 사용할 수 있어.
# XPath로 링크 찾기
link = driver.find_element_by_xpath('//a[@href="/next_page"]')
link.click()
링크 이동 자동화의 장점
Selenium을 이용한 링크 내비게이션은 페이지네이션이 있거나 여러 섹션으로 나뉜 사이트에서 데이터를 수집하는 작업을 자동화할 수 있어. 예를 들면 검색 결과를 훑거나 온라인 쇼핑몰 사이트에서 상품 카탈로그를 탐색할 때 정말 유용해.
3. 스크롤과 링크 이동 결합
이제 페이지를 스크롤한 후 필요한 링크나 요소를 찾아 연결된 다른 페이지로 이동해야 하는 상황을 상상해 보자. 이건 결합된 과정이고, 자동화가 가능해.
결합 스크립트 예제
from selenium import webdriver
import time
# 브라우저 드라이버 초기화
driver = webdriver.Chrome()
# 대상 페이지 열기
driver.get('https://example.com/scroll_and_click')
# 숨겨진 요소 로드 위해 페이지 스크롤
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3)
# 필요한 링크 찾아 클릭
link = driver.find_element_by_xpath('//a[text()="Load More"]')
link.click()
# 세션 종료
driver.quit()
무엇이 잘못될 수 있을까?
동적 페이지 작업 시, 요소가 로드되지 않았거나 불완전하게 로드되는 경우가 있을 수 있어. 이런 경우에는 대기 메서드를 사용해 원하는 요소가 접근 가능해질 때까지 기다려야 해.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 클릭할 수 있을 때까지 기다림
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//a[text()="Load More"]'))
)
element.click()
대기 메서드를 사용하는 건 준비되지 않은 요소로 인해 발생할 수 있는 오류를 피할 수 있게 하고 스크립트를 더 안정적으로 만들어줘.
GO TO FULL VERSION