CodeGym /행동 /Python SELF KO /데이터 수집을 위한 웹 페이지에서 폼 및 버튼 작업 자동화

데이터 수집을 위한 웹 페이지에서 폼 및 버튼 작업 자동화

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

1. 기술적 기초

폼 채우기 및 제출

폼 작업은 사용자 등록 자동화, 설문지 작성, 데이터 수집 등에서 자주 필요해. 수백 개의 폼을 채워야 할 때, 수작업으로 하는 건 마치 빨대로 수박 먹으려는 것 같지. Selenium의 초능력을 사용하면 몇 초 만에 끝낼 수 있어.

먼저 우리가 어떻게 텍스트 필드를 채우고 폼을 제출할 수 있는지 알아보자. 일반적인 로그인 폼을 예로 들어 기본 단계를 학습할 거야:

Python

from selenium import webdriver

# 드라이버 설정 (예: ChromeDriver)
driver = webdriver.Chrome()

try:
    # 웹 페이지 열기
    driver.get("https://example.com/login")

    # 사용자 이름 입력 필드 찾기 및 텍스트 입력
    username_input = driver.find_element_by_name("username")
    username_input.send_keys("내_로그인")

    # 비밀번호 입력 필드 찾기 및 텍스트 입력
    password_input = driver.find_element_by_name("password")
    password_input.send_keys("내_비밀번호")

    # 폼 제출 버튼 찾기 및 클릭
    submit_button = driver.find_element_by_name("submit")
    submit_button.click()

finally:
    # 드라이버 닫기
    driver.quit()
    

검증 및 오류 처리

개발자를 망치는 건 예상치 못한 오류지. 그래서 미리 처리해야 해. try/except를 사용해서 오류를 잡고, 무슨 일이 잘못됐는지 로그로 확인하자.

Python

try:
    username_input = driver.find_element_by_name("username")
    username_input.send_keys("내_로그인")
except Exception as e:
    print(f"사용자 이름 입력 중 오류: {e}")
    logging.error("사용자 이름 입력 중 오류", exc_info=True)
    

2. 체크박스 (Checkboxes)

버튼을 클릭하는 방법을 배운 후 여러 옵션을 선택해 보자. 체크박스를 선택하거나 선택 해제하려면 click() 메서드를 사용할 수 있어. 체크 여부 확인은 is_selected() 속성을 보면 돼.

Python

checkbox = driver.find_element_by_id("checkbox_id")
if not checkbox.is_selected():
    checkbox.click()
    

3. 라디오 버튼 (Radio Buttons)

라디오 버튼은 여러 옵션 중 하나만 선택 가능하지. 체크박스와 마찬가지로 click() 메서드로 선택하고, is_selected()로 상태를 확인할 수 있어.

Python

radio_button = driver.find_element_by_id("radio_button_id")
if not radio_button.is_selected():
    radio_button.click()
    

4. 드롭다운 (Dropdowns)

드롭다운은 여러 옵션이 포함된 리스트야. Selenium에서는 Select 클래스를 사용하여 이를 관리할 수 있어.

Python

from selenium.webdriver.support.ui import Select

dropdown = Select(driver.find_element_by_id("dropdown_id"))
dropdown.select_by_visible_text("Option 1")
    

select_by_index() 또는 select_by_value()를 사용해서도 선택할 수 있어.

5. 텍스트 영역 (Text Areas)

텍스트 영역은 텍스트 필드와 비슷하지만 주로 많은 양의 텍스트 입력에 사용돼. 사용 방법은 텍스트 필드와 동일해.

Python

text_area = driver.find_element_by_id("textarea_id")
text_area.send_keys("텍스트 영역 샘플 텍스트입니다.")
    

6. 날짜 선택기 (Date Picker)

날짜 필드는 사용자가 날짜를 선택하도록 해. 일반 텍스트 입력 필드라면 send_keys()로 입력할 수 있어.

Python

date_field = driver.find_element_by_id("date_field_id")
date_field.send_keys("2023-12-25")  # 날짜 형식은 사이트에 따라 다를 수 있음
    

하지만 팝업 캘린더를 열고 날짜를 선택해야 하는 경우도 해봐야 할 수 있어.

7. 파일 업로드 필드 (File Upload)

이 필드는 파일을 서버에 업로드할 수 있게 해. send_keys()를 사용하고 로컬 경로를 지정하면 돼.

Python

file_input = driver.find_element_by_id("file_upload_id")
file_input.send_keys("/path/to/file.txt")
    

8. 숨겨진 필드 (Hidden Fields)

숨겨진 필드는 페이지에 표시되지 않지만 폼 전송에 필요한 정보를 저장하는 데 사용돼. 값을 확인하거나 변경하려면 get_attribute()를 사용해 확인할 수 있어.

Python

hidden_field = driver.find_element_by_id("hidden_field_id")
value = hidden_field.get_attribute("value")
print("숨겨진 필드 값:", value)
    

9. 작업 성공 확인

작업이 제대로 수행되었는지 확인하는 건 필수지. 폼 제출 후 요청이 성공적으로 처리되었는지 확인하는 방법은 다음과 같아:

Python

># 사이트에 성공적으로 로그인했는지 확인
if "환영합니다" in driver.page_source:
    print("로그인이 성공적으로 완료되었습니다!")
else:
    print("로그인 중 오류가 발생하였습니다.")
    

10. 문제 및 해결책

문제

  • 작업의 불안정성: 웹 페이지는 자주 변경되지. 페이지 구조 변경은 스크립트 오류로 이어질 수 있어, 코드의 최신 상태를 정기적으로 확인해야 해.
  • 네트워크 속도 의존성: 페이지 및 요소 로드 속도가 일정하지 않을 수도 있어. 명시적 대기(explicit waits)를 사용해 지연을 처리하자.

해결책

  • 로깅: 모든 작업의 로그를 남기면 문제를 파악하기 수월해. logging 라이브러리를 사용하면 로깅이 훨씬 쉬워져.
  • 코드의 모듈화: 복잡한 작업을 함수와 모듈로 나눠서 작업을 더 쉽게 수정하고 테스트할 수 있도록 하자.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION