세조목

최종 프로젝트 7일차(24.04.02) 본문

데이터 분석 공부/프로젝트

최종 프로젝트 7일차(24.04.02)

세조목 2024. 4. 2. 21:03

최종 프로젝트 7일차입니다.

금일은 가게명을 클릭하고 플레이스 페이지가 열림과 동시에 전혀 다른 페이지가 함께 열리는 오류와

 

리뷰 탭의 '더보기' 버튼을 클릭했을때 '거리뷰' 페이지가 열리는 오류를 수정했습니다.

 

  1. sleep() 시간 늘이기
  2. driver.switch_to.parent_frame()을 driver.switch_to.default_content()로 변경하기
  3. class name 변경하기

를 시도해봤지만 위 방법들로는 해결할 수가 없었습니다.

그러다가 

def page_down(num):
    body = driver.find_element(By.CSS_SELECTOR, 'body')
    #body.click()
    for i in range(num):
        body.send_keys(Keys.PAGE_DOWN)

화면을 스크롤하는 함수인 page_down의 'body.click()' 코드를 주석처리하니

위 두가지 오류가 해결됐습니다.

 

for i in range(2):
	page_down(8)
	sleep(2)
            
	driver.find_element(By.CLASS_NAME,'NSTUp').find_element(By.XPATH, ".//div/a/span").click()
	sleep(2)

위 코드는 페이지를 스크롤 한 후 'NSTUp' 를 클래스명으로 가진 요소들을 클릭하라는 코드인데요,

아마 page_down을 할 때 페이지의 body 부분이 클릭이 되어서 앞서 언급한 오류들이 발생했을 것으로 추정이 됩니다.

body.click()과 두 오류들 간에 정확히 어떠한 상관관계가 있는지는 아직 잘 모르겠습니다.

 

오류를 해결하고서 전체 코드를 돌려보니 다행히 문제없이 잘 돌아갔습니다.

하지만 아직 해결해야 할 요소들이 몇 가지 남아있었는데요,

  1. '더보기' 버튼이 보이지 화면에 보이지 않아도 클릭할 수 있게끔 하기
  2. 모든 '더보기' 버튼 클릭하게끔 하기

였습니다.

while review_btn.is_enabled():
	more_btns = driver.find_elements(By.CLASS_NAME, 'NSTUp')
	if len(more_btns) >= 3:
		driver.execute_script("arguments[0].click();", more_btns[1])
		sleep(2)

	else:
		more_btn = driver.find_element(By.CLASS_NAME, 'NSTUp').find_element(By.XPATH, './/div/a')
		driver.execute_script("arguments[0].click();", more_btn)
		sleep(2)

이렇게 코드를 작성함으로써 위 두가지 문제를 해결할수는 있었으나

생각했던것보다 '더보기' 버튼의 개수가 많아서(22년 5월 27일까지 내려가고 있음)

클릭 횟수를 제한해야 할 것 같습니다.

해당 작업은 내일 진행할 예정이며 코드 수정이 끝나면 본격적으로 크롤링 작업에 들어가려고합니다.