주간책톡(부산 도서관) 크롤링 -6 카카오톡 메세지 크롤링, pygetwindow, pyautogui

2023. 5. 1. 21:34프로젝트/주간책톡

 

주간책톡에서 알림톡으로 이번주의 책톡요약이 왔으면 그 링크를 텍스트로 저장해 넘겨주는 형식으로 계획했었다.

하지만 카카오톡을 건드리는게 조금 문제가 있었다.

 

https://namu.wiki/w/%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%86%A1%20%EB%B4%87/%EC%A0%9C%EC%9E%91%EB%B2%95

 

카카오톡 봇/제작법 - 나무위키

이문서에서 공식봇, 비공식봇의 제작방법을 간략하게 설명한다. 따라서 더 자세히 알고싶다면 관련 커뮤니티 또는 다른 봇 문서를 참고하면 좋을 듯하다. 이 문서에서 설명한 방법대로 봇을 사

namu.wiki

대충 감을 잡기위해서 나무위키를 참고했는데 LOCO 프로토콜의 개념을 겉핥았고, 다른 언어들의 작동 로직도 대충 알게되었다.

 

https://github.com/WooilJeong/PyKakao

 

GitHub - WooilJeong/PyKakao: 카카오 API를 사용하기 위한 오픈소스 파이썬 라이브러리

카카오 API를 사용하기 위한 오픈소스 파이썬 라이브러리. Contribute to WooilJeong/PyKakao development by creating an account on GitHub.

github.com

그중 가장 관심있게 PyKakao 개인 비공식 라이브러리도 보고,

 

https://developers.kakao.com/docs/latest/ko/index

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

카카오 디벨로퍼스에 등록도하고 카카오톡 API 공식 문서도 보고 고민을 한 결과.

 

지금은 토이프로젝트니 범죄, 상업적~ 그런 경고가 많고, 왜 그런 문제가 생겼는지를 보고 조금더 통신에 대한 공부를 더 한뒤에 건드려보기로 하고. 일단 카카오에서 공식적으로 제공하는 선에서 해결해보기로 변경했다.

(나중에 PyKakao 왜 이런 로직인지 좀더 자세히 보기 .)

 

그냥 카카오톡에 알림이오면 내가 직접 링크를 복사해서 붙여주기면 하면되는 간단한 작업이지만,

파이썬의 윈도우 화면 인식 라이브러리에 대해 연습할 겸 

  1. 카카오톡 앱에서 대화를 내보내고 싶은 채팅방을 연 후, 상단 우측에 있는 '더보기' 버튼을 클릭
  2. '대화 내보내기'를 선택.
  3. 내보낼 범위를 선택한 후, 확인을 클릭.
  4. 내보낸 대화를 텍스트 파일로 저장.
  5. 텍스트 파일에서 링크를 슬라이싱.
  6. 링크를 주간책톡 크롤링 의 url 에 전송

화면 인식을 이용해 가라(pesudo?)로 일단 진행해보기로 변경하였다.

1,2,3,4 이 윈도우 컨트롤과 화면인식을 이용하게 될 부분이다.

 

 

import pyautogui
import pygetwindow as gw

# 카카오톡 창을 찾아 활성화.
kakao_window = gw.getWindowsWithTitle("카카오톡")[0]
if kakao_window:
    print('1') # 찾으면 1 출력
kakao_window.activate()
if kakao_window.isMaximized == False:
    kakao_window.Maximized()

PyGetWindowException: Error code from Windows: 0 - 작업을 완료했습니다.

 

계속 이오류가 떠서 끙끙 앓았다.

 

인식은 잘 되는데

 

if kakao_window.isMaximized == False:
    kakao_window.maximize()
    
if kakao_window.isMinimized:
    kakao_window.activate()

작업을 완료했습니다. 오류가 뜨는데 이미 활성화가 되어있거나, 다양한 이유에서 발생하는 오류인데. (나중에 정리)

순서대로 일단 1. 최대화 or 2. 최소화면 활성화 

이런식으로 창으로 끄집어내(?) 야 함.

 

혹시나 안되면

import pygetwindow as gw

for window in gw.getAllTitles():
    print(window)

 

getAllTitles() 로 한번 확인해서 확인해보는 것이 좋다.

 

 

이런식으로 카카오톡의 창이 활성화 되고, 최대화 한 것을 확인할 수 있다.

 

 

728x90