CodeGym /행동 /Python SELF KO /웹 페이지에서 요소를 찾고 상호작용하는 함수 만들기

웹 페이지에서 요소를 찾고 상호작용하는 함수 만들기

Python SELF KO
레벨 37 , 레슨 2
사용 가능

1. 페이지에서 요소 찾기 기초

요소 검색 메서드 사용

Selenium을 실제 프로젝트에서 사용하기 시작하면, 첫 번째 작업 중 하나는 페이지에서 요소를 찾는 것이다. 이는 호텔에서 엘리베이터 버튼을 찾는 것과 비슷하다: 버튼이 어디에 있는지 알아야 눌러서 원하는 층으로 갈 수 있다.

Selenium은 요소를 찾기 위한 몇 가지 방법을 제공한다. 당신의 선호도에 따라 find_element_by_id, find_element_by_name, find_element_by_xpath, find_element_by_css_selector 등을 사용할 수 있다. 이미 알고 있는 것을 상기하며 간단한 예제를 작성해 보자:

Python

from selenium import webdriver

# 브라우저 인스턴스 생성 (여기서는 Chrome 사용)
driver = webdriver.Chrome()

# 페이지 열기
driver.get('http://example.com')

# ID로 요소 검색
element_by_id = driver.find_element_by_id('main')

# 이름으로 요소 검색
element_by_name = driver.find_element_by_name('username')

# XPath로 요소 검색
element_by_xpath = driver.find_element_by_xpath('//div[@class="content"]')

# CSS 선택자로 요소 검색
element_by_css = driver.find_element_by_css_selector('div.content')

find_element와 find_elements의 차이

여러 요소를 캡처하려면 (예: btn 클래스가 있는 모든 버튼), find_elements 메서드가 필요하다. find_elementfind_elements의 차이는 전자가 하나의 요소만 반환하고 후자는 요소의 리스트를 반환한다는 것이다.

Python

# 하나의 요소 검색
single_element = driver.find_element_by_class_name('btn')

# 여러 요소 검색
multiple_elements = driver.find_elements_by_class_name('btn')

# 검색된 요소 순회
for element in multiple_elements:
    print(element.text)

보시다시피, find_elements는 페이지에 여러 개 있을 수 있는 요소 컬렉션과 작업하기에 적합하다. 각 find_element_xxx 메서드에는 리스트를 반환하는 해당 find_elements_xxx가 있다.

2. 요소와의 상호작용

버튼, 링크 및 입력 필드와의 상호작용

이제 요소를 찾는 방법을 떠올렸으니, 이제 상호작용하는 방법을 기억할 때다! 이는 LEGO 세트 놀이와 비슷하다: 올바르게 조립해야 원하는 것을 얻을 수 있다.

Selenium이 제공하는 메서드를 사용하여 요소와 상호작용할 수 있다. 다시 한 번, 이것을 어떻게 하는지 보자:

Python

# 버튼 클릭하기
button = driver.find_element_by_id('submit')
button.click()

# 입력 필드에 텍스트 입력하기
input_field = driver.find_element_by_name('q')
input_field.send_keys('Python selenium tutorial')

# 요소의 텍스트 가져오기
header = driver.find_element_by_tag_name('h1')
print(header.text)

이벤트 처리 및 동적 요소 작업

동적 요소(예: 특정 작업 후에만 나타나는 버튼)와 작업해야 할 때 지연 및 대기를 고려하는 것이 중요하다. Selenium은 이러한 요소의 로드를 기다리는 방법을 제공한다. 그 중 하나는 WebDriverWait 클래스를 expected_conditions와 결합하여 사용하는 것이다.

Python

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 10초 동안 버튼이 나타날 때까지 대기
button = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'submit'))
)

button.click()

참고. expected_conditions를 매번 작성하는 대신 EC로 이름을 바꿨다.

대기를 사용하면 스크립트가 더 견고해지고 일시적인 지연이나 페이지 로드가 느린 경우에도 중단되지 않는다. 실무에서는 이런 일이 매우 자주 발생한다 - 거의 항상 :)

3. 무엇이 잘못될 수 있을까?

모든 것이 잘못될 수 있다. 요소와 상호작용하려는 준비를 마쳤을 때, 갑자기 무언가 잘못될 수 있다. 이 여정에서 당신을 기다리고 있는 몇 가지 일반적인 오류를 논의해 보자.

첫 번째로, NoSuchElementException - 특히 찾고 있는 요소가 페이지에 존재하지 않을 때 자주 보게 될 오류 메시지다. 이는 존재하지 않는 요소를 찾으려고 할 때 발생한다. 이러한 상황을 방지하려면 try-except를 사용하여 예외를 처리할 수 있다.

Python

from selenium.common.exceptions import NoSuchElementException

try:
    element = driver.find_element_by_id('non_existent_id')
except NoSuchElementException:
    print("앗, 요소가 없는 것 같아!")

또한 동적 요소와 로드 시간과 관련된 문제가 발생할 수 있다. 이 경우, 앞서 논의한 대로 WebDriverWait을 사용하여 요소 로드를 기다리십시오.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION