모니터에 특정 pixel에 색상을 확인하고
설정해 놓은 색이 나오면
색을 인식하여 클릭 이벤트가 동작하는 예제입니다.
알아야 하는 내용
1. 특정 pixel 에 좌표를 알아야 한다.
2. 특정 pixel 의 색상을 알아야 한다.
3. 마우스 click event 가 발생해야 한다.
4. 주기적으로 특정 좌표의 색을 확인할수 있어야 한다.
위의 기능을 하나씩 확인해 보도록 하겠습니다.
설치해야 하는 package 는
Pillow
pyautogui
2가지 입니다.
https://pyautogui.readthedocs.io/en/latest/
https://pillow.readthedocs.io/en/stable/installation.html
실행 소스는 아래와 같다.
import pyautogui
# 현재 스크린의 사이즈를 확인한다.
screenWidth, screenHeight = pyautogui.size()
print(screenWidth,screenHeight)
# 현재 스크린을 저장한다.
im = pyautogui.screenshot()
# 특정 영을만 저장할수도 있다.
#im = pyautogui.screenshot(region=(0,0, 300, 400))
# 현재 마우스의 좌표를 구한다.
cmpos = pyautogui.position()
# 현재 좌표의 RGB 값을 구한다.
rgb = im.getpixel(cmpos)
# 무슨 색인지 출력한다.
print(rgb)
# 마우스를 150,150 좌표로 이동한다.
pyautogui.moveTo(150, 150)
# 현재 좌표를 구한다.
cmpos = pyautogui.position()
# 현재 좌표의 RGB 값을 구한다.
rgb = im.getpixel(cmpos)
print(rgb)
# 색상을 비교해서 동을하면 click 한다.
if rgb == (0,0,0):
print('hello')
pyautogui.click()
# pyautogui.doubleClick()
실행하면
좌표 150,150 으로 이동하여 색상이 RGB(0,0,0) 이면 click 을 한다.
그럼 이걸 함수로 만들어서 실행하도록 해 보겠다.
import pyautogui
def functionA():
# 현재 스크린의 사이즈를 확인한다.
screenWidth, screenHeight = pyautogui.size()
print(screenWidth,screenHeight)
# 현재 스크린을 저장한다.
im = pyautogui.screenshot()
# 특정 영을만 저장할수도 있다.
#im = pyautogui.screenshot(region=(0,0, 300, 400))
# 현재 마우스의 좌표를 구한다.
cmpos = pyautogui.position()
# 현재 좌표의 RGB 값을 구한다.
rgb = im.getpixel(cmpos)
# 무슨 색인지 출력한다.
print(rgb)
# 마우스를 150,150 좌표로 이동한다.
pyautogui.moveTo(150, 150)
# 현재 좌표를 구한다.
cmpos = pyautogui.position()
# 현재 좌표의 RGB 값을 구한다.
rgb = im.getpixel(cmpos)
print(rgb)
# 색상을 비교해서 동을하면 click 한다.
if rgb == (0,0,0):
print('hello')
pyautogui.click()
# pyautogui.doubleClick()
functionA()
소스는 동일하다.
단지 변경된 내용은
def functionA():
함수를 선언하고
함수를 호출해서 실행한 것 뿐이다.
그럼 함수를 하나 더 만들어 보겠다.
내용은 1초에 한번씩 hello 를 출력하고 10번 출력하면 종료되도록
import pyautogui
from time import sleep
def functionB():
i = 1
while i < 10:
sleep(1)
print('1 second after hello')
i += 1
실행하면 1초에 한번씩 1 second after hello 가 출력된다.
그럼 여기다 먼저 만들어 놓은 funcationA를 호출해 보도록 하겠다.
import pyautogui
from time import sleep
def functionB():
i = 1
while i < 10:
sleep(1)
print('1 second after hello')
i += 1
functionA()
def functionA():
# 현재 스크린의 사이즈를 확인한다.
screenWidth, screenHeight = pyautogui.size()
print(screenWidth,screenHeight)
# 현재 스크린을 저장한다.
im = pyautogui.screenshot()
# 특정 영을만 저장할수도 있다.
#im = pyautogui.screenshot(region=(0,0, 300, 400))
# 현재 마우스의 좌표를 구한다.
cmpos = pyautogui.position()
# 현재 좌표의 RGB 값을 구한다.
rgb = im.getpixel(cmpos)
# 무슨 색인지 출력한다.
print(rgb)
# 마우스를 150,150 좌표로 이동한다.
pyautogui.moveTo(150, 150)
# 현재 좌표를 구한다.
cmpos = pyautogui.position()
# 현재 좌표의 RGB 값을 구한다.
rgb = im.getpixel(cmpos)
print(rgb)
# 색상을 비교해서 동을하면 click 한다.
if rgb == (0,0,0):
print('hello')
# pyautogui.click()
# pyautogui.doubleClick()
functionB()
그럼 1초에 한번씩 functionA가 실행된다.
functionA의 내용은
현재 좌표에 색상을 비교해서 클릭하는 기능을 한다.
functionB는 단순히 functionA를 1초에 한번씩 호출하는 기능을 한다.
이렇게 구성하면 문의하신 내용이 동작할 것입니다.
여기서 알아야 하는 내용은
함수를 만들어 사용하는 방법과
sleep 함수 사용법입니다.
해당 소스는 github 에 올려 놓았습니다.
https://github.com/wonsolution/macro06/blob/main/macro10.py
댓글
댓글 쓰기