juuuding
Chapter 04 자동화 프로그램 만들기 #11 본문
#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(실행할 함수)
'Python > 파이썬과 40개의 작품들' 카테고리의 다른 글
Chapter 05 크롤링, 이미지처리, 데이터분석 시각화 프로그램 만들기 # 19 (0) | 2023.02.15 |
---|---|
Chapter 04 자동화 프로그램 만들기 #13 (0) | 2023.02.14 |
Chapter 04 자동화 프로그램 만들기 #10 (0) | 2023.01.30 |
Chapter 04 자동화 프로그램 만들기 #9 (0) | 2023.01.27 |
Chapter 03 기초 프로그램 만들기 #7, 8 (0) | 2023.01.24 |