전에 만들었던 카카오페이지 작품 소개글을 긁어서 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 파일을 잘 생성하였습니다.
'Work > 개발' 카테고리의 다른 글
[파이썬] selenium, 크롬 버전 115이후 에러 (0) | 2023.10.01 |
---|---|
Flutter doctor cmdline-tools component is missing 해결법 (0) | 2023.09.06 |
Chat GPT와 함께하는 개발 - 네이버 블로그 키워드 지수 도출하기 (0) | 2023.03.27 |
파이썬 스크립트 실행 문제 - PowerShell 수정 (0) | 2023.03.21 |
이미지, 텍스트 크롤링 및 저장 프로그램 만들기 (selenium, BeautifulSoup) (0) | 2021.11.11 |
댓글