이제 데이터 공부 안하는 블로그

[패스트캠퍼스 수강 후기] 파이썬 인강 100% 환급 챌린지 28회차 미션 본문

파이썬

[패스트캠퍼스 수강 후기] 파이썬 인강 100% 환급 챌린지 28회차 미션

공사노비 2020. 11. 29. 22:45





28일차

셀레니움을 사용해서 네이버 항공권을 검색하는 연습을 했습니다.
오늘 selenium에서 쓰는 메쏘드들은 webdriver, by, webdriverwait, expected_conditions 라는 것들입니다.

먼저 크롬드라이버를 사용해서 불러옵니다.
browser = webdriver.chrome()
그리고 창을 최대화해서 띄웁니다.
browser.maximize_window() # 창

지난번에도 했던것처럼 가고자 하는 웹페이지의 url을 가져 옵니다. url 변수에 넣어줍니다. 네이버 항공권 페이지에 들어가 보면 url을 가져올수 있습니다.
url = "https://flight.naver.com/flights/"
browser.get(url)

웹페이지에서 개발자도구를 사용해서 살펴 보면 가는날 오는날은 선택하는 부분의 코드를 찾을수 있습니다. html태그라던지 클래스나 xpath등 여러가지 요소들로 찾을수 있습니다. 가는날 오는날 부분을 클릭해보면
html태그내에 가는날 선택이라는 글자가 있습니다. 그부분을 사용해 보았습니다. find element by link text라는 메소드를 활용합니다.
browser.find_element_by_link_text("가는날 선택").click()

웹페이지를 열어 가는날 선택을 클릭해 열어 보면 이번달과 다음달이 자동으로 보입니다. 날짜들이 두번 반복되게됩니다. 예를들어 7월1일, 8월1일 이면 1일이라는 숫자가 두번 반복되게 되어 이것을 선택해주어야 합니다. 순번을 정해주어 고를수 있게 합니다. element에 s를 붙여 여러개 있다고 알려주고 [0] 첫번째라고 알려줍니다. 가는날 오는날은 모두 [0]첫번째로 정해주면 가는날 7월 27일 오는날 7월27일 이렇게 선택됩니다.
browser.find_elements_by_link_text("27")[0].click()
browser.find_elements_by_link_text("27")[0].click()

8월 27일을 선택하고 싶다면 [1]로 두번째로 알려주면됩니다.
browser.find_elements_by_link_text("27")[1].click()
browser.find_elements_by_link_text("27")[1].click()

여기까지 하고나서 목적지를 선택해주어야 하는데 이부분도 개발자도구를 활용해서 김포 제주 노선을 선택해 줍니다. 여기서는 xpath를 활용합니다. 원하는 부분을 클릭해서 선택한다음 우클릭 copy xpath해줍니다.
browser.find_element_by_xpath("//*[@id='recommendationList']/ul/li[1]"/div/span).click()
browser.find_elements_by_link_text("항공권 검색").click()
여기까지 하면 원하는 목적지, 날짜의 항공권이 검색됩니다.

그다음으로 검색된 항공권들을 출력해 보았습니다. 검색하는데 시간이 걸리기 때문에 최대10초동안 기다리라는 명령을 해줍니다. webdriverwait를 사용합니다. 기다리는 조건을 줄수도 있습니다. 내가 원하는 컨텐츠가 검색되어 나올때까지 기다리게 합니다. 항공권이 검색되어 나오는 부분의 xpath를 복사한 다음 조건으로 달아주면 됩니다.
이부분을 try 문을 사용해서 검색되지 않았을때나 에러가 났을때를 대비해 줍니다.
try:
elem = WebDriverWait(browser, 10).until(EC.presence_of_all_elements_located(by.xpath, "//*[@id='content']/div[2]/div/div[4]/ul/li[1]/div[4]/div/div/div[1]/span[1]"))
# print(elem.text)
finally:
browser.quit()

검색된 결과를 출력합니다.
elem = browser.find_element_by_xpath("//*[@id='content']/div[2]/div/div[4]/ul/li[1]/div[4]/div/div/div[1]/span[1]")
print(elem.text)

출력해보면 항공사 비행시간 가격등의 정보가 잘 들어가 있는것을 볼수 있습니다.
파이썬 수업을 들으면서 짧은 시간이지만 제법 많이 공부를 한것 같습니다.


강의소개 https://bit.ly/33a7nvc