본문 바로가기
Work/개발

[파이썬] 크롤링을 위한 카카오페이지 로그인 처리 (BeautifulSoup)

by 라리올리 2023. 4. 19.
반응형

전에 만들었던 카카오페이지 작품 소개글을 긁어서 txt로 떨구는 프로그램을 잘 사용하고 있었는데, 최근 카카페가 15세 및 19세가 등장하면서 재미있게 읽은 작품들의 소개글을 받아오지 못하는 현상이 발생했습니다.

 

크롤링 프로그램에서 띄우는 크롬 브라우저에서는 기 저장된 로그인 정보나 ID/PW정보가 없기 때문에, 로그인하지 않은 상태에서 카카오 페이지를 사용하는 것처럼 인식이 됩니다. 그래서 전체연령가인 소설만 정보를 가지고 올 수 있어서 매우 아쉬운 마음에 로그인 처리 하는 부분을 추가하였습니다.

 

우선 기존에 만든 프로그램에 ( 이전글 - 이미지, 텍스트 크롤링 및 저장 프로그램 만들기  참고) 로그인 처리 하는 부분만 살짝 추가하였습니다.

 

1. 로그인 Flow

1. 검색 결과 페이지에서 로그인 아이콘 클릭  (기존 소스 이동 경로 그대로 유지)

2. 로그인 화면에 ID/PW 정보 전달

3. 로그인 버튼 클릭 

 

기존 프로그램의 접근이 해당 제품을 검색한 페이지로 바로 이동하기 때문에, 그 페이지에서 로그인 아이콘을 눌러서 로그인하는 방식으로 개발하였습니다.

 

검색 결과 화면

저는 '걱정 마세요 합의된 사기 결혼입니다'라는 글의 리뷰를 올리고 싶어서 검색을 했고, 저 페이지에서 상단 오른쪽에 있는 로그인 아이콘을 클릭하도록 만들었습니다.

F12로 해당 영역의 Xpath를 copy 하였습니다. 

 

로그인 처리 화면

로그인 아이콘을 클릭하면 위와 같이 ID와 패스워드를 입력하는 화면이 나옵니다. loginKey와 password 칸에 기존에 사용하던 ID/PW를 전달하도록 처리합니다.

 

그리고 마지막으로 로그인 버튼을 클릭하면, 로그인이 된 상태의 검색 결과 화면으로 이동합니다. 그 이후에는 이전에 사용하던 소스를 그대로 활용하여 텍스트와 표지 이미지를 저장하도록 하였습니다.

 

 

2. 프로그램 소스 코드

#로그인 처리
driver.find_element(By.XPATH, '//*[@id="__next"]/div/div[1]/div/div[1]/div[3]/div/img').click()
driver.find_element(By.XPATH, '//*[@id="loginKey--1"]').send_keys('카카오페이지 ID')
driver.find_element(By.XPATH, '//*[@id="password--2"]').send_keys('카카오페이지 패스워드')
driver.find_element(By.XPATH, '//*[@id="mainContent"]/div/div/form/div[4]/button[1]').click()

코드는 단 네 줄로 매우 간단합니다.

 

그런데 실행해 보면 오류가 발생합니다. 클릭 후 화면 이동 전에 ID를 입력하려고 한다거나, ID/PW 입력 전에 로그인 클릭을 한다거나, 로그인 클릭 후 검색 화면 로딩 전에 해당 작품 클릭을 하려고 할 때마다 해당 element가 없다는 오류가 계속 발생합니다.

 

이를 방지하기 위해서는 화면 로딩시간에 맞춰서 time.sleep() 함수를 적절히 배치해 주어야 합니다.

 

 

3. 결과

검색 화면에서 ID/PW입력 후 15세 작품에도 상세 화면으로 이동하였고, 기존 프로그램에서 변경사항이 많이 없음으로 그대로 txt 파일을 잘 생성하였습니다. 

 

 

 

반응형

댓글