PyAutoGUI 이미지로 마우스 이동¶프로그램이 항상 조금씩 다른 위치에서 실행되기 때문에 화면 상의 특정한 위치에 마우스를 위치시키기가 까다로울 수 있습니다. 이런 상황에서 화면 상의 특정 영역의 이미지 파일을 갖고 있으면 그 영역을 찾아서 클릭할 수 있습니다. 아래의 예제를 통해 계산기가 어디에 있든 항상 똑같은 버튼을 클릭하도록 해보겠습니다. 순서는 아래와 같습니다. 우선 계산기의 특정 영역을 캡처해서 해당 폴더에 아래와 같이 ‘five.PNG’ 파일로 저장합니다. five.PNG¶ 1. 이미지 영역 찾기¶locateOnScreen()¶import pyautogui five_btn = pyautogui.locateOnScreen('five.PNG') print(five_btn)
해당 영역을 찾지 못하면 2. 이미지 영역의 가운데 위치 얻기¶center()¶import pyautogui five_btn = pyautogui.locateOnScreen('five.PNG') center = pyautogui.center(five_btn) print(center)
center를 출력하면 (1462, 675)가 출력됩니다. 3. 클릭하기¶click()¶import pyautogui center = pyautogui.locateCenterOnScreen('five.PNG') pyautogui.click(center) 이미지
영역을 찾고 가운데 지점을 찾는 더 쉬운 방법은 아래와 같이 화면 상에서 계산기의 위치가 바뀌어도 항상 똑같은 위치를 클릭할 수 있습니다. 1920×1080 화면 기준으로, 클릭에 1~2초 정도가 걸리기 때문에 게임에 적용하기는 어려울 수 있지만 대부분의 어플리케이션에서 사용될 수 있습니다. because file is missing, has improper permissions, or is an unsupported or invalid format 한글 경로가 있으면 이런 오류가 나타납니다.. 해결방법은 numpy -> opencv -> pyautogui로 해결하면 됩니다. Tree구조는 이렇습니다.
출처 : https://jangjy.tistory.com/337 --- 참고 ---더보기 pyautogui 이미지 인식관련해서는 차피 opencv로 구성되어 있기 때문에 오류가 나면 pyautogui로 검색 하는 것보다 opencv로 검색하는것이 잘 나옵니다.. 추가로 함수로 함 만들어 봤습니다. 1. 네이버 화면에서 좌측 상단 메뉴의 이메일 아이콘을 클릭하여 메일 메뉴로 들어간다면.. 가. 아이콘 이미지 캡쳐하여 저장 (현재 workspace폴더\mail.png) 나. mail.png 이미지를 찾아 커서 이동 후 클릭 import pyautogui try: # mail.png 찾기 mail_icon = pyautogui.locateOnScreen('mail.png') # mail.png 좌표 Box(left=384, top=274, width=27, height=29) 만약 이미지 못찾으면 None 출력 print(mail_icon) # 이미지로 이동 pyautogui.moveTo(mail_icon) # 이미지 클릭 (이미지 정가운데 부분) pyautogui.click() except OSError as exp: print(exp) 다. 이미지는 좌측 상단부터 우측으로 차례로 찾는다. 라. 위 코드는 찾고자 하는 이미지가 우측하단쪽에 있을 경우 속도가 느린 단점이 있다. 이에 다음과 같이 grayscale 옵션을 줄 경우 모든 이미지를 음영처리하여 찾기 때문에 약 30% 속도 개선이 발생한다. 하지만 정확도가 떨어지는 단점이 있다. mail_icon = pyautogui.locateOnScreen('mail.png', grayscale=True) 마. 두번째 방법으로는 이미지를 찾는 범위를 지정할 수 있다. # 시작지점 x, y 좌표, 가로/세로 길이 mail_icon = pyautogui.locateOnScreen('mail.png', region=(x, y, width, height)) 바. 세번째 방법으로는 정확도를 줄이는 방법이 있다. confidence 옵션을 주어 정확도를 낮추면 이미지를 쉽게 찾을 수 있다. 하지만 정확도가 낮아질 수록 잘못된 이미지를 찾을 수 있다. Terminal > pip install opencv-python # confidence의 기본값은 0.999 (99.9% 일치할 경우) mail_icon = pyautogui.locateOnScreen('mail.png', confidence=0.8) # 80% 이상 일치할 경우 사. 화면 전환 등의 이미로 찾고자 하는 대상 이미지가 바로 보여지지 않을 경우 처리 mail_icon = pyautogui.locateOnScreen('mail.png') while mail_iconis None: mail_icon = pyautogui.locateOnScreen("mail.png") pyautogui.click(mail_icon) 2. 동일한 이미지가 여러개일 경우.. 예를 들면 아래 그럼의 체크박스를 모두 클릭해야한다면 가. 아이콘 이미지 캡쳐하여 저장 (현재 workspace폴더\checkbox.png) 나. checkbox.png 이미지를 찾아 모두 클릭 import pyautogui try: # locateAllOnScreen 모든 이미지 찾기 # 만약 locateOnScreen를 사용한다면 처음 발견하는 이미지만 처리 후 종료 for i in pyautogui.locateAllOnScreen("checkbox.png"): # 이미지 좌표값 출력 print(i) # 체크박스 클릭 pyautogui.click(i) except OSError as exp: print(exp) |