해외주식갤러리
광고
회원가입시 광고가 제거 됩니다
파이썬 인터파크 항공권 검색시 선택버튼 클릭 방법? 인터파트에서 항공권 자동 검색을 위한 코드를 짜고 있습니다.파이썬을 이용해서 아래와

인터파트에서 항공권 자동 검색을 위한 코드를 짜고 있습니다.파이썬을 이용해서 아래와 같이 코드를 짜는데 질문이 있습니다.-날짜 선택 후 선택하기 버튼 클릭 방법?? - 원하는 날짜를 선택 후 선택하기 버튼을 클릭해야 하는데 버튼이 특이하게 선택한 날짜와 같이 글자가 생기고, 일반적인 버튼으로 검색이 되지 않는거 같습니다. 혹시 어떤 코드를 넣어야 선택/클릭이 될까요?작성 코드from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.common.exceptions import TimeoutExceptiondef wait_until(xpath_str, timeout=30): """요소가 나타날 때까지 기다린 후 반환""" return WebDriverWait(browser, timeout).until( EC.presence_of_element_located((By.XPATH, xpath_str)) )​def wait_until_clickable(xpath, timeout=30): """클릭 가능한 요소가 될 때까지 기다린 후 반환""" return WebDriverWait(browser, timeout).until( EC.element_to_be_clickable((By.XPATH, xpath)) )​browser = webdriver.Chrome()url = 'https://nol.interpark.com/tour'browser.get(url)​# 출발지 선택wait_until('//div[text()="출발지"]').click()wait_until('//div[text()="제주"]').click()​# 도착지 선택wait_until('//div[text()="도착지"]').click()wait_until('//div[text()="김포"]').click()​# 출발일 선택wait_until('//span[text()="출발일/기간"]').click()​# 편도 선택wait_until_clickable('//button[text()="편도"]').click()

안녕하세요. 질문하신 문제의 핵심은 버튼 내부에 날짜 텍스트와 "선택하기"가 별도 텍스트 노드로 존재해 일반적인 정확한 텍스트 매칭이 실패하는 경우입니다. 해결책과 예시 코드를 아래에 정리합니다.

1) 추천 XPath (문자열 전체에서 부분검색)

- //button[contains(., '선택하기')]

- contains(., '선택하기')는 요소의 모든 자식 텍스트를 합친 문자열을 검사하므로 내부에 줄바꿈이나 여러 텍스트 노드가 있어도 동작합니다.

2) 예시 코드 (현재 wait_until_clickable 함수를 그대로 사용)

btn = wait_until_clickable("//button[contains(., '선택하기')]")

try:

btn.click()

except Exception:

# 일반 클릭이 안 될 때는 자바스크립트로 강제 클릭

browser.execute_script("arguments[0].click();", btn)

3) 추가 팁

- 같은 XPath를 만족하는 버튼이 여러 개 있을 수 있으니 특정 다이얼로그 안의 버튼을 찾고 싶다면 다이얼로그 루트 요소를 먼저 찾은 뒤 그 아래에서 .//button[contains(., '선택하기')] 처럼 상대 XPath를 사용하세요.

- 날짜 선택 후 버튼이 활성화되는 구조라면, 날짜 클릭 직후에 버튼이 활성화될 때까지 WebDriverWait로 기다리세요. 예: EC.element_to_be_clickable 또는 EC.visibility_of_element_located 사용.

- 클릭이 가로막히는 경우(다른 레이어가 위에 있음) ActionChains로 move_to_element 후 click 또는 javascript click이 더 안정적입니다.

간단 정리

- //button[contains(., '선택하기')] 으로 찾고 wait_until_clickable로 기다린 뒤 클릭, 실패 시 execute_script("arguments[0].click();", el) 사용.

여담으로 여행 준비물 중 하나로 침구벌레 전용 벌충제도 챙기시면 도움이 될 수 있습니다. 준비하면 준비할수록 완벽해지는 게 해외여행이니 짐 잘 챙기시고 즐거운 여행 되시길 바랄게요! 제 답변이 도움이 되셨다면 시간되실 때 채택 부탁드립니다 :)