1. 문제 발생
- 여행 도중, 셔틀버스 예약을 해야 했는데 가려고 한 날짜에 표가 모두 매진이었다. 그러나 가끔 취소표가 나오고 있었다.
- 취소표 확인을 위해 계속 웹사이트를 새로고침하고 있을 수는 없는 일이어서, 1분 간격으로 조회하여 텔레그램 봇을 통해 메시지를 보내주는 자동화 코드를 작성하기로 하였다.
- 이를 위해서는, 페이지 접속 후 캘린더에서 9/24일을 클릭하여 각 시간대별로 남은 자리가 있는지를 확인해야 한다.
- 그런데 목표로 한 날짜인 9/24를 클릭하려고 하는 도중 다음과 같은 에러가 발생하였다.
Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='ctl00_leftNav_calAvailability']/tbody/tr[6]/td[7]/a"}
- 오류메시지의 내용은 설정한 xpath를 통해 element를 찾을 수 없다는 것이었다.
2. 문제의 원인
HTML 문서 안에 iframe 태그가 포함되어 있는 것이 문제의 원인이었다. iframe은 inline frame을 의미하는데, HTML 페이지의 특정 영역에 액자처럼 별개의 HTML 문서를 불러올 수 있다. 내가 셀레니움을 통해 클릭해야 하는 날짜는 iframe을 통해 로드된 제2의 HTML 문서에서 찾아야 하는데, 일반적인 find_element_by_xpath로는 제2의 HTML 문서 안까지 스크래핑이 되지 않았다.
3. 해결코드
browser.switch_to.frame() 코드를 실행하여 iframe 태그로 불러온 제2의 HTML 문서로 접근할 수 있었다.
from selenium import webdriverons
from selenium.webdriver.common.by import By
#fixed values
url = '목표로_하는_url'
date_set_xpath = '날짜_클릭_xpath'
#scrapping
browser = webdriver.Chrome(service=Service(ChromeDriverManager().install()),options=options)
browser.get(url)
iframe = browser.find_element(By.XPATH,"//iframe[@id='iframeAdventureOffice']")
browser.switch_to.frame(iframe)
elem_date = browser.find_element(By.XPATH, date_set_xpath)
elem_date.send_keys(Keys.ENTER)
'코딩 > Python' 카테고리의 다른 글
[Python] for문에서 전역변수 설정하기 (0) | 2022.09.30 |
---|---|
[AWS Lambda] Layer를 사용하여 라이브러리 업로드 (0) | 2022.09.17 |
[Python] 해당 폴더에 파이썬 모듈 설치하는 방법 (0) | 2022.09.15 |
[Python] while 조건문에 True 입력하면 무한루프 (0) | 2022.09.15 |
[Python] telegram 모듈 설치 관련 (0) | 2022.09.15 |
댓글