교수님 코로나 이슈
따로 공지 전까지는 비대면으로 수업 진행
아마 시험(04/26)때는 대면으로 진행할 수 있을 듯
storePop2라는 자바스크립트 코드를 확인.
호출된 자바스크립트 => bs로 파싱해 이용함
storeListUL에 리스트 형식으로 매장정보가 나열되어 있는 듯!
셀레니움
=> 크롬드라이버
로 페이지 띄우기
bs
=> html만 파싱 가능(정적인 페이지)
셀레니움의 경우 클릭, 엔터, 키보드 입력 등의 이벤트 제어 가능.
구글에 selenium example
하게되면 셀레니움 예제들이 뜨는데, 이걸 참고할 것!
store를 찾기위해 > 인스펙터로 찾아본 결과 > li 태그의 store 임.
오류날때
크롬버전에 맞게 크롬드라이버를 다운받아야 함.
관련 글(개발자도구에서 XPath 알아내기)
https://blog.naver.com/PostView.naver?blogId=nknn2004&logNo=221603097164&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView
from selenium import webdriver
import time
driver = webdriver.Chrome('./chromedriver.exe')
url = 'https://www.coffeebeankorea.com/main/main.asp'
driver.implicitly_wait(10) # 브라우저 별 속도차이가 있기때문에, 웹 페이지가 열릴때까지 기다림
# 실행될 때 창을 크게 띄우기
driver.maximize_window()
driver.get(url)
# 매장 검색까지의 경로(단계적인 자동화된 click으로 이동)
# 메인 홈페이지에서 store 카테고리로 이동
driver.find_element_by_css_selector('.store').click()
# store에서 지역 검색 이동
driver.find_element_by_css_selector('.region_srh').click()
# 지역 중 '시/도' 검색 이동
driver.find_element_by_id('localTitle').click()
time.sleep(0.2) # 정보가 로딩될때까지 기다리겠음
# 지역 중 '시/도'의 '서울' 검색 이동
driver.find_element_by_link_text('서울').click()
time.sleep(0.2) # 정보가 로딩될때까지 기다리겠음
# 지역 중 '구/군' 검색 이동
driver.find_element_by_id('localTitle2').click()
time.sleep(0.2) # 0.2초 정도 기다림(로딩 시간)
# # 지역 중 '구/군'의 '강남구' 검색 이동
driver.find_element_by_link_text('강남구').click()
# local2에 어떤 값이 있는 지 알기위해(서울시 구가 몇개야?)
# id값을 가져오는 2가지 방법
# 1. driver.find_element_by_id()
# 2. css 선택자(id: #, class: .)
storeLocal2 = driver.find_element_by_css_selector('#storeLocal2')
li_list = storeLocal2.find_element_by_tag_name('li')
# 다시 돌려놈(콤보박스 선택가능하게끔)
driver.find_element_by_id('localTitle2').click()
for li in li_list:
driver.find_elements_by_id('localTitle2').click()
time.sleep(0.3) # 클릭과 클릭 사이 0.3초 정도 기다림(로딩 시간)
li.click()
time.sleep(0.3)
# 상위 태그인 storeListUL에서 하위 태그인 li 지정하기
storeListli = driver.find_elements_by_id('#storeListUL > li')
print('-----------------------------------------------------------')
# store에는 각각의 li가 들어감
for store in storeListli:
store_name = store.find_element_by_css_selector('div.store.txt > p.name > span').text
store_address = store.find_element_by_css_selector('div.store.txt > p.address > span').text
store_tel = store.find_element_by_css_selector('div.store.txt > p.tel').text
print(store_name, store_address, store_tel)
result.append([store_name, store_address, store_tel])
print(len(li_list))