데분프_0412

allzeroyou·2022년 4월 12일
0

교수님 코로나 이슈

따로 공지 전까지는 비대면으로 수업 진행
아마 시험(04/26)때는 대면으로 진행할 수 있을 듯

preview


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))

profile
모든 건 zero 부터, 차근차근 헛둘헛둘

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN