juuuding

Chapter 04 자동화 프로그램 만들기 #11 본문

Python/파이썬과 40개의 작품들

Chapter 04 자동화 프로그램 만들기 #11

jiuuu 2023. 2. 8. 22:27

 #11 오토 마우스를 활용한 PC카카오톡 자동화

 

1. 라이브러리 설치

pip install pyautogui
pip install pyperclip
pip install schedule

 - schedule 라이브러리는 일정시간마다 함수를 동작시킬 때 사용한다.

 

 

2. PC카카오톡에서 사진 캡처 후 저장

 - 보내고 싶은 사람의 프로필 사진 부분을 캡처하여 저장한다. 마우스의 위치에 따라 PC카카오톡의 배경색상이 다르다. 오토 마우스는 100% 동일한 이미지로 좌표를 얻기 때문에 배경색상이 달라도 다른 이미지로 인식한다. 그러므로 3가지 경우(그냥, 마우스 올렸을 때, 클릭했을 때)의 사진을 모두 저장하도록 한다.

 

 

3. 사진에서 좌표 추출하기

 *프로그램 실행 전에  카카오톡에서 이름이 pc화면에 보이도록 하기

import pyautogui
import os

# 경로를 현재 .py 파일의 실행경로로 이동. pyautogui 한글 인식X라 경로 이동함
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)

 

 

4. 좌표를 이용하여 메세지를 자동으로 보내기

import pyautogui
import pyperclip
import time
import os

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)

# 엔터 입력 후 1초 기다림
pyautogui.write(["enter"])
time.sleep(1.0)

# esc 눌러 창 닫고 1초 기다림
pyautogui.write(["escape"])
time.sleep(1.0)

 

 

5. 일정 시간마다 동작하는 코드

import pyautogui
import pyperclip
import time
import threading
import os

os.chdir(os.path.dirname(os.path.abspath(__file__)))

def send_message():
    # 10초 후에 함수 실행. 자신의 함수에서 10초 후에 자신의 함수를 다시 불러옴
    threading.Timer(10, send_message).start()

    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_message()

 

 

6. 일정 간격마다 보내기

import pyautogui
import pyperclip
import time
import threading
import os
import schedule

os.chdir(os.path.dirname(os.path.abspath(__file__)))

def send_message():
    threading.Timer(10, send_message).start()

    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_message()

# 매주 금요일 9:10마다 실행
schedule.every().friday.at("09:10").do(send_message())

 


※ 스케쥴 이용

 

 30분마다 실행

  schedule.every(30).minutes.do(실행할 함수)

 

 매주 월요일 9시 10분마다 실행

  schedule.every().monday.at("09:10").do(실행할 함수)

 

 매일 10시 30분마다 실행

  schedule.every().day.at("10:30").do(실행할 함수)