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분에 메시지 표시됨
파이썬은 쉽다.
남들이 많들어 놓은게 많은 만큼.
그 말은 다양한 활용법을 아는 만큼 잘 쓸 수 있다.
이런 내용들을 과연 어디까지 알아야 할까?
알 필요가 있을까?
내가 써 먹을 곳에 알맞게 써 먹을만큼 배우고
나머지는 그때 그때 찾아서 써야 할 듯.
최근댓글