본문 바로가기
코딩자료/프로그램

파이썬 WebDriver 메서드 종류 및 설명

Published Date:2024. 4. 25.
openipc.kr

Selenium WebDriver 메서드 종류 및 설명

파이썬에서 "메서드"란 클래스에 속한 함수를 가리킵니다. 클래스는 객체를 정의하는데 사용되며, 메서드는 해당 클래스의 객체에서 실행할 수 있는 함수입니다. 메서드는 클래스의 인스턴스에 대해 작동하며, 클래스의 속성에 액세스하고 해당 속성을 조작하는 데 사용될 수 있습니다. 이러한 메서드는 클래스의 행동을 정의하고 객체 간의 상호작용을 처리하는 데 사용됩니다. 

주요 메서드 분류

  • 브라우저 제어:
    브라우저를 열거나 종료하는 메서드, 브라우저 창 크기를 조정하는 메서드 등이 여기에 속합니다.
  • 네비게이션:
    URL을 로드하거나 뒤로/앞으로 가기를 수행하는 메서드가 여기에 해당합니다.
  • 요소 찾기:
    웹 페이지에서 특정 요소를 식별하는 메서드들입니다. 주로 XPath나 CSS 선택자를 사용하여 요소를 찾습니다.
  • 요소 상호작용:
    찾은 요소와 상호작용하는 메서드들로, 클릭하거나 값을 입력하는 등의 동작을 수행합니다.
  • JavaScript 실행:
    웹 페이지에서 JavaScript 코드를 실행하는 메서드가 여기에 해당합니다. 이를 통해 페이지 내부의 동적 요소를 조작할 수 있습니다.
  • 대기:
    특정 조건이 충족될 때까지 대기하는 메서드들로, 요소가 로드되었거나 특정 상태에 도달할 때까지 기다리는 기능을 제공합니다.
  • 정보 가져오기:
    웹 페이지의 정보를 가져오는 메서드들로, 텍스트, 속성, 이미지 등의 정보를 추출합니다.
  • 창 및 프레임 관리:
    웹 페이지의 창이나 프레임을 조작하는 메서드들입니다. 다른 창으로 전환하거나 프레임 내부의 요소에 접근할 수 있습니다.
  • 쿠키 및 로컬 스토리지:
    웹 페이지의 쿠키나 로컬 스토리지를 관리하는 메서드들이 여기에 해당합니다.
  • 스크린샷 및 동작:
    웹 페이지의 스크린샷을 찍거나 페이지를 스크롤하는 등의 동작을 수행하는 메서드가 여기에 속합니다.

브라우저 제어

driver.get(url): 지정된 URL로 웹 페이지를 엽니다.
driver.close(): 현재 브라우저 창을 닫습니다.
driver.quit(): 모든 브라우저 창을 닫고 WebDriver 세션을 종료합니다.
driver.maximize_window(): 브라우저 창을 최대화합니다.


예시

from selenium import webdriver

# Chrome WebDriver 객체 생성
driver = webdriver.Chrome()

# 웹 페이지 URL
url = "https://www.google.com/"

# 1. driver.get(url): 지정된 URL로 웹 페이지를 엽니다.
driver.get(url)  # Google 홈페이지로 이동

# 2. driver.maximize_window(): 브라우저 창을 최대화합니다.
driver.maximize_window()  # 브라우저 창을 전체 화면으로 확장

# 잠시 대기 (브라우저 창이 최대화되는 것을 확인하기 위해)
time.sleep(3)

# 3. driver.close(): 현재 브라우저 창을 닫습니다.
driver.close()  # 현재 활성화된 탭/창 닫기

# 4. driver.quit(): 모든 브라우저 창을 닫고 WebDriver 세션을 종료합니다.
# (이미 창이 닫혔으므로 주석 처리)
# driver.quit()

네비게이션

driver.back(): 이전 페이지로 이동합니다.
driver.forward(): 다음 페이지로 이동합니다.
driver.refresh(): 현재 페이지를 새로 고칩니다.


예시

from selenium import webdriver
import time

# Chrome WebDriver 객체 생성
driver = webdriver.Chrome()

# 첫 번째 웹 페이지 URL
url1 = "https://www.google.com/"
# 두 번째 웹 페이지 URL
url2 = "https://www.wikipedia.org/"

# 1. driver.get(url1): 첫 번째 페이지로 이동
driver.get(url1)  # Google 홈페이지로 이동
time.sleep(2)  # 2초 대기 (페이지 로딩 시간)

# 2. driver.get(url2): 두 번째 페이지로 이동
driver.get(url2)  # Wikipedia 홈페이지로 이동
time.sleep(2)  # 2초 대기 (페이지 로딩 시간)

# 3. driver.back(): 이전 페이지(Google)로 이동
driver.back()
time.sleep(2)  # 2초 대기 (페이지 로딩 시간)

# 4. driver.forward(): 다음 페이지(Wikipedia)로 이동
driver.forward()
time.sleep(2)  # 2초 대기 (페이지 로딩 시간)

# 5. driver.refresh(): 현재 페이지(Wikipedia)를 새로 고침
driver.refresh()
time.sleep(2)  # 2초 대기 (페이지 로딩 시간)

# 브라우저 닫기
driver.quit()

요소 찾기

find_element(By.ID, "id"): ID로 요소를 찾습니다.
find_element(By.NAME, "name"): name 속성으로 요소를 찾습니다.
find_element(By.CLASS_NAME, "class"): 클래스 이름으로 요소를 찾습니다.
find_elements(By.TAG_NAME, "tag"): 태그 이름으로 요소들을 찾습니다.
find_element(By.XPATH, "xpath"): XPath 표현식으로 요소를 찾습니다.
find_element(By.CSS_SELECTOR, "css"): CSS 선택자로 요소를 찾습니다.


예시

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.example.com/")  # 예시 페이지로 대체 필요

# 1. find_element(By.ID, "id") - ID로 요소 찾기
element_by_id = driver.find_element(By.ID, "element-id")  # "element-id"로 요소 찾기

# 2. find_element(By.NAME, "name") - name 속성으로 요소 찾기
element_by_name = driver.find_element(By.NAME, "element-name")  # "element-name"으로 요소 찾기

# 3. find_element(By.CLASS_NAME, "class") - 클래스 이름으로 요소 찾기
element_by_class = driver.find_element(By.CLASS_NAME, "element-class")  # "element-class"로 요소 찾기

# 4. find_elements(By.TAG_NAME, "tag") - 태그 이름으로 요소들 찾기 (여러 개)
elements_by_tag = driver.find_elements(By.TAG_NAME, "a")  # 모든 "a" 태그 (링크) 찾기

# 5. find_element(By.XPATH, "xpath") - XPath 표현식으로 요소 찾기
element_by_xpath = driver.find_element(By.XPATH, "//button[@class='btn']")  # XPath로 버튼 요소 찾기

# 6. find_element(By.CSS_SELECTOR, "css") - CSS 선택자로 요소 찾기
element_by_css_selector = driver.find_element(By.CSS_SELECTOR, "input.form-control")  # CSS 선택자로 입력 요소 찾기

# 찾은 요소들로 필요한 작업 수행 (예: 클릭, 텍스트 가져오기 등)

driver.quit()

요소 상호작용

element.click(): 요소를 클릭합니다.
element.send_keys("text"): 요소에 텍스트를 입력합니다.
element.clear(): 요소의 내용을 지웁니다.
element.submit(): 요소를 제출합니다(예: 폼 제출).
JavaScript 실행
driver.execute_script(script, *args): JavaScript 코드를 실행합니다.


 예시

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.example.com/")  # 예시 페이지로 대체 필요

# 1. element.click() - 요소 클릭
button = driver.find_element(By.ID, "submit-button")
button.click()  # 버튼 클릭

# 2. element.send_keys("text") - 요소에 텍스트 입력
input_field = driver.find_element(By.NAME, "username")
input_field.send_keys("myusername")  # 입력 필드에 "myusername" 입력

# 3. element.clear() - 요소 내용 지우기
input_field.clear()  # 입력 필드 내용 지우기

# 4. element.submit() - 요소 제출 (예: 폼 제출)
form = driver.find_element(By.ID, "login-form")
form.submit()  # 폼 제출

# 5. driver.execute_script(script, *args) - JavaScript 코드 실행
# 예: 페이지 스크롤
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

# 다른 JavaScript 예시
# - 요소의 스타일 변경: driver.execute_script("arguments[0].style.backgroundColor = 'yellow'", element)
# - 클릭 이벤트 트리거: driver.execute_script("arguments[0].click();", element)

driver.quit()

대기

time.sleep(seconds): 지정된 시간 동안 대기합니다.
WebDriverWait(driver, timeout).until(condition): 특정 조건이 충족될 때까지 대기합니다.


 예시

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()
driver.get("https://www.example.com/")  # 예시 페이지로 대체 필요

# 1. time.sleep(seconds) - 지정된 시간 동안 대기
time.sleep(5)  # 5초 동안 대기

# 2. WebDriverWait(driver, timeout).until(condition) - 특정 조건이 충족될 때까지 대기
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
    # 요소가 발견되면 이 부분이 실행됩니다.
    print("요소를 찾았습니다!")
except TimeoutException:
    print("요소를 찾을 수 없습니다.")

driver.quit()


정보 가져오기

driver.title: 현재 페이지의 제목을 가져옵니다.
driver.current_url: 현재 페이지의 URL을 가져옵니다.
driver.page_source: 현재 페이지의 HTML 소스 코드를 가져옵니다.
element.text: 요소의 텍스트를 가져옵니다.
element.get_attribute("attribute"): 요소의 속성 값을 가져옵니다.


 예시

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.example.com/")  # 예시 페이지로 대체 필요

# 1. driver.title - 현재 페이지 제목 가져오기
page_title = driver.title
print("페이지 제목:", page_title)

# 2. driver.current_url - 현재 페이지 URL 가져오기
current_url = driver.current_url
print("현재 URL:", current_url)

# 3. driver.page_source - 현재 페이지 HTML 소스 코드 가져오기
# (출력 내용이 길기 때문에 주석 처리)
# page_source = driver.page_source
# print("페이지 소스 코드:", page_source)

# 4. element.text - 요소의 텍스트 가져오기
heading = driver.find_element(By.TAG_NAME, "h1")
heading_text = heading.text
print("Heading Text:", heading_text)

# 5. element.get_attribute("attribute") - 요소의 속성 값 가져오기
link = driver.find_element(By.LINK_TEXT, "Click Here")
link_href = link.get_attribute("href")
print("링크 URL:", link_href)

driver.quit()

창 및 프레임 관리

driver.switch_to.window(window_handle): 특정 창으로 전환합니다.
driver.switch_to.frame(frame_reference): 특정 프레임으로 전환합니다.
쿠키 및 로컬 스토리지
driver.get_cookies(): 현재 쿠키를 가져옵니다.
driver.add_cookie(cookie_dict): 쿠키를 추가합니다.
driver.delete_cookie(name): 쿠키를 삭제합니다.
driver.execute_script("return localStorage.getItem('key');"): 로컬 스토리지 값을 가져옵니다.


 예시

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.example.com/")  # 예시 페이지로 대체 필요

# 1. driver.switch_to.window(window_handle) - 특정 창으로 전환
# 예: 새 창 열기
driver.execute_script("window.open('https://www.google.com/', '_blank');")
# 모든 창 핸들 가져오기
window_handles = driver.window_handles
# 새 창으로 전환 (마지막으로 열린 창)
driver.switch_to.window(window_handles[-1])

# 2. driver.switch_to.frame(frame_reference) - 특정 프레임으로 전환
# 예: 프레임 이름으로 전환
driver.switch_to.frame("myFrame")

# 3. 쿠키 및 로컬 스토리지
# 3.1 driver.get_cookies() - 현재 쿠키 가져오기
cookies = driver.get_cookies()
print(cookies)

# 3.2 driver.add_cookie(cookie_dict) - 쿠키 추가
cookie_dict = {'name': 'mycookie', 'value': '12345'}
driver.add_cookie(cookie_dict)

# 3.3 driver.delete_cookie(name) - 쿠키 삭제
driver.delete_cookie('mycookie')

# 3.4 driver.execute_script("return localStorage.getItem('key');") - 로컬 스토리지 값 가져오기
local_storage_value = driver.execute_script("return localStorage.getItem('myKey');")
print(local_storage_value)

driver.quit()

스크린샷 및 동작

driver.save_screenshot(filename): 현재 페이지의 스크린샷을 저장합니다.
ActionChains(driver).move_to_element(element).click().perform(): 마우스를 요소로 이동하고 클릭하는 등의 복잡한 동작을 수행합니다.


 예시

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
driver.get("https://www.example.com/")  # 예시 페이지로 대체 필요

# 1. driver.save_screenshot(filename) - 스크린샷 저장
driver.save_screenshot("screenshot.png")  # 현재 페이지 스크린샷을 "screenshot.png" 파일로 저장

# 2. ActionChains - 복잡한 동작 수행
element = driver.find_element(By.ID, "myElement")
actions = ActionChains(driver)
actions.move_to_element(element)  # 요소로 마우스 이동
actions.context_click()  # 우클릭
actions.perform()  # 동작 실행

# 다른 ActionChains 예시
# - 드래그 앤 드롭: actions.drag_and_drop(source, target).perform()
# - 더블 클릭: actions.double_click(element).perform()
# - 키 입력: actions.send_keys("text").perform()

driver.quit()


반응형