본문 바로가기
Python/크롤링, 스크래핑 (Selenium 등등)

[Python] Selenium 자바스크립트를 이용한 조작 방법 execute_script(), switch_to.window()

by dong_su 2024. 5. 28.

자바스크립트를 이용한 조작 방법들

# 버튼 클릭
driver.execute_script("document.getElementsByTagName('button')[0].click()")

# ID=textInput인 요소인 value 작성
driver.execute_script("document.querySelector('#textInput').value='~'")

# <option> 태그 체크하는 법
driver.execute_script("document.getElementsByTagName('option')[2].selected=true")

# 체크박스 체크하는 법
driver.execute_script("document.getElementById('checkbox').checked=true")

요소가 가려지거나 스크롤 등의 이유로 접근이 안될 때

try:
    td_elements[0].click()
except Exception as e:
    driver.execute_script("arguments[0].click();", td_elements[0])

새 브라우저 탭 열기(url 지정안했기 때문에 빈 페이지)

driver.execute_script("window.open('');")

컨텍스트 전환

# (드라이버가 현재 관리하고 있는 모든 창의 핸들(고유식별자), 기존 창은 [0])
driver.switch_to.window(driver.window_handles[1])

스크롤 하는 법

# 1. 원하는 높이 Y까지 스크롤
driver.execute_script("window.scrollTo(0, Y)")
 
# 2. 문서의 끝까지 1회 스크롤
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
 
# 3. 문서의 제일 끝까지 스크롤
last_height = driver.execute_script("return document.body.scrollHeight")

while True:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

    time.sleep(0.5)

    new_height = driver.execute_script("return document.body.scrollHeight")

    if new_height == last_height : break

    last_height = new_height
 
# 4. Page Down 키를 이용한 스크롤
driver.find_element(By.XPATH, '/html/body').send_keys(Keys.PAGE_DOWN)

# 5. 내가 원하는 요소가 가운데 오도록 스크롤하기
driver.execute_script("arguments[0].scrollIntoView({block : 'center'});", 원하는 요소)