오토마우스를 활용하여 PC에 설치된 카카오톡을 통해 메시지를 자동으로 보내는 프로그램을 만들어본다.
마우스와 키보드를 자동으로 제어하기 위한 라이브러리
pip install pyautogui
클립보드에 값을 복사하거나 붙여넣기 용도로 사용하는 라이브러리
pip install pyperclip
일정시간마다 함수를 동작시킬 때 사용
pip install schedule
오토 마우스는 사진으로 좌표를 찾을 수 있는 기능이 있다. 나에게 메시지를 보내기 위해 내 프로필 사진 부분을 캡쳐하여 저장해놓아야한다. 여기서 PC카카오톡의 화면 상태는 그냥 두었을 때, 마우스를 올려두었을 때, 클릭할 때 각각 배경색상이 미세하게 틀리다. 오토마우스는 100% 동일한 이미지로 좌표를 얻기 때문에 배경색상이 틀려도 다른 이미지로 인식하기에 3가지의 경우 모두 사진으로 저장해야한다.
import pyautogui
import os
#경로를 .py파일의 실행경로로 이동, 현재 경로로 이동
os.chdir(os.path.dirname(os.path.abspath(__file__)))
#pic1.png 파일과 동일한 그림을 찾아 좌표 출력하기
picPosition = pyautogui.locateOnScreen('pic1.png')
print(picPosition)
# 못찾았으면 pic2.png 파일과 동일한 그림 찾아 좌표 출력
if picPosition is None:
picPosition = pyautogui.locateOnScreen('pic2.png')
print(picPosition)
# 못찾았으면 pic3.png 파일과 동일한 그림 찾아 좌표 출력
if picPosition is None:
picPosition = pyautogui.locateOnScreen('pic3.png')
print(picPosition)
import pyautogui
import pyperclip
import time
import os
#경로를 .py파일의 실행경로로 이동, 현재 경로로 이동
os.chdir(os.path.dirname(os.path.abspath(__file__)))
#이미지에서 좌표 찾기
picPosition = pyautogui.locateOnScreen('pic1.png')
print(picPosition)
if picPosition is None:
picPosition = pyautogui.locateOnScreen('pic2.png')
print(picPosition)
if picPosition is None:
picPosition = pyautogui.locateOnScreen('pic3.png')
print(picPosition)
#이미지에서 좌표의 중간 좌표값을 찾는다
clickPosition = pyautogui.center(picPosition)
pyautogui.doubleClick(clickPosition) #이미지 더블클릭하여 카카오톡 메세지 전송창이 열린다.
#아래 문구를 붙여넣은 후에 1초 기다린다
pyperclip.copy("이 메세지는 자동으로 보내는 메세지 입니다~~")
pyautogui.hotkey("ctrl", "v")
time.sleep(1.0)
pyautogui.write(["enter"]) #엔터 입력하고 1초 기다리기
time.sleep(1.0)
pyautogui.write(["escape"]) #esc 입력하고 1초 기다리기
time.sleep(1.0)
파이썬의 thread 기능을 이용하여 자기 자신의 함수를 호출하는 코드 만들기
import pyautogui
import pyperclip
import time
import threading #threading 라이브러리를 사용
import os
# 경로를 .py파일의 실행경로로 이동, 현재 경로로 이동
os.chdir(os.path.dirname(os.path.abspath(__file__)))
# 카카오톡에 메세지를 보내는 코드를 send_message 함수로 만들기
def send_mesaage():
threading.Timer(10, send_mesaage).start()
#자신의 함수에서 10초후에 자신의 함수를 다시 불러오기 때문에 10초마다 실행된다.
picPosition = pyautogui.locateOnScreen('pic1.png')
print(picPosition)
if picPosition is None:
picPosition = pyautogui.locateOnScreen('pic2.png')
print(picPosition)
if picPosition is None:
picPosition = pyautogui.locateOnScreen('pic3.png')
print(picPosition)
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)
send_mesaage() #처음에 send_message 함수를 시행하고, 이후에는 threading.Timer에 의해 10초마다 불려진다.
종료하려면 터미널에서 정지 눌러주어야함!
30분마다 실행
schedule.every(30).minutes.do(실행할 함수)
매주 월요일 9시마다 실행
schedule.every().monday.at("09:00").do(실행할 함수)
매일 10시 30분마다 실행
schedule.every().day.at("10:30").do(실행할 함수)