반응형

project 11. 카카오톡 메시지 보내기 @ 파이썬과 40개의 작품들

 

1. 찾으려고 하는 이미지 저장

2. 이미지를 찾아서 좌표 확인

 > 이때, 한글 파일명을 pyautogui 가 잡지 못했다.

 >> numpy, opencv, pyautogui 써서 해결

 >>> 나중에 질문해 보니, 이미지 파일을 영문으로 만들고,

        파일 경로는 한글경로가 섞여 있더라도 상관없게 하기 위해

        파이썬이 현재 실행중인 디렉토리로 옮겨 온 뒤 파일만 찾도록 한다. (os.chdir 사용)

3. 이미지 중심 찾아 더블클릭 후 메시지 작성

4. 쓰레드로 만들어 계속 돌리기

5. 스케줄링하여 원하는 시간에 반복해서 메시지 보내기


1. 찾으려고 하는 이미지 저장

> 카톡에서 자기한테 메시지를 보내려고 한다. 

> 여러가지 상태 (비활성화, 마우스on, 마우스click) 마다 배경색이 약간식 달라지므로 3가지 이미지를 모두 저장한다.

>> 여기에 대해서도 뭔가 해결방안이 있을 것 같다. 어느 정도만 같아도 인식하는 것으로

>>> https://hongku.tistory.com/333

 

파이썬 OpenCV 설치부터, 이미지 비교(피처매칭, Feature Matching)

OpenCV 설치 pip 최신버전으로 업데이트를 진행합니다. python -m pip install --upgrade pip pip를 이용한 필요한 패키지 설치를 합니다. pip install matplotlib pip install numpy pip install OpenCV-Python..

hongku.tistory.com

 

import os
import numpy as np
import pyautogui
import cv2

# 다양한 경우의 사짖 저장 (한글명)
filenames = ['내사진_1.png', '내사진_2.png', '내사진_3.png', '내사진_4.png']

for findFile in filenames:

	# 파일 패스를 현재 디렉토리로 만들고
    path = os.path.dirname(os.path.realpath(__file__))
    # 파일명을 뒤에 붙인 뒤
    img = os.path.join(path, findFile)
	# numpy를 사용해 한글이름을 어찌저찌하는 듯
    n = np.fromfile(img, np.uint8)
    # 최종적으로 cv를 이용해 이미지 읽어서
    img = cv2.imdecode(n, cv2.IMREAD_COLOR)
	# 그 이미지의 좌표값을 i로 넣는다.
    picPosition = pyautogui.locateOnScreen(img)
        
    # 이미지가 있다면 찾은 파일명과 좌표 출력    
    if picPosition is not None:
        print(f'{findFile} : {picPosition}')
        break

 

2. 한글 파일명을 영문으로 바꾼다면, numpy를 사용하지 않고 해결가능

#경로를 .py파일의 실행경로로 이동, 현재 경로로 이동
os.chdir(os.path.dirname(os.path.abspath(__file__)))

picPosition = pyautogui.locateOnScreen('pic1.png')
print(picPosition)

 

3. 이미지 중심 찾아 메시지 보내기

# 찾은 이미지 박스의 중앙 위치 확인
clickPosition = pyautogui.center(picPosition)
# 더블클릭
pyautogui.doubleClick(clickPosition)

# 채팅창이 열리면 메시지 붙여 넣기
pyperclip.copy("이 메세지는 자동으로 보내지는 겁니다.")
pyautogui.hotkey('ctrl', 'v')
time.sleep(1.0)

# 엔터로 보내고 빠져 나오기(창 닫기)
pyautogui.write(['enter'])
time.sleep(1.0)

pyautogui.write(['escape'])
time.sleep(1.0)

 

결과. 

 

4. 쓰레드로 만들어 10초마다 보내기

# 함수로 만들고
def sendMessage():

    # 10초마다 snedMEssage 쓰레드 실행
    threading.Timer(10, sendMessage).start()
	
    try:
    	'''
        메시지 보내는 코드
        '''
                
    except Exception as e:
        # 에러 표기
        print('ERROR : ', e)
        

# 메인에서 함수 실행
sendMessage()

결과.

 

5. 스케줄링 하기

# 10초에 한 번씩으로 스케줄링
schedule.every(10).seconds.do(sendMessage)

# 10분에 한 번씩으로 스케줄링
schedule.every(10).minutes.do(sendMessage)

# 월요일 9시 10분마다 실행
schedule.every().monday.at("09:10").do(sendMessage)

# 매일 10시 23분에 실행
# 하나의 함수 두 번 스케줄링 가능
schedule.every().day.at('07:24').do(sendMessage)

while True:
    # 스케줄로 팬딩된(대기상태에 있는) 것들은 체크하면서 모두 실행
    # 1초마다 체크해서 조건 맞으면 실행
    schedule.run_pending() 
    time.sleep(1)

결과.

 

스케줄링한 7:24분에 메시지 표시됨

 


파이썬은 쉽다.

남들이 많들어 놓은게 많은 만큼.

 

그 말은 다양한 활용법을 아는 만큼 잘 쓸 수 있다.

 

이런 내용들을 과연 어디까지 알아야 할까?

알 필요가 있을까?

 

내가 써 먹을 곳에 알맞게 써 먹을만큼 배우고

나머지는 그때 그때 찾아서 써야 할 듯.

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기