Pyautogui를 이용하여 마우스 클릭 매크로를 만들다 보면 한가지 어려운 점이 발생한다.
이 매크로를 사용하는 사용자마다 컴퓨터 모니터나 해상도가 달라서, 어떤 버튼이 위치한 x좌표와 y좌표를 고정시키기가 어렵다.
그래서 그 버튼의 위치를 opencv를 연동한 screenshot 기능으로도 찾을 수 있지만, 실제로 사용해보니 정확도가 많이 낮다.
그보다는 사용자가 직접 매크로를 사용하기 전, 특정 버튼의 위치를 저장할 수 있도록 하는 함수를 만들어 보는게 좋을 것 같다는 생각에서 아래와 같이 만들어 보았다.
import pyautogui
import time
def save_locations():
message = "마우스 초기 설정을 시작합니다. 우측 상단의 카메라에 마우스를 위치합니다 (5초 후 저장)"
print(message)
time.sleep(5)
p1 = pyautogui.position()
message = "위치가 저장되었습니다. 카메라를 클릭 후, ""앨범에서 사진 또는 영상 선택"" 버튼으로 이동합니다. (5초 후 저장)"
print(message)
time.sleep(5)
p2 = pyautogui.position()
message = "위치가 저장되었습니다. 마우스 클릭 후, 앨범의 가장 좌측 상단 사진 중앙 하단에 위치합니다 (클릭하면 선택이 되는 위치가 아니라, 클릭하면 미리보기로 넘어가는 위치입니다. 5초 후 저장)"
print(message)
time.sleep(5)
p3 = pyautogui.position()
message = "위치가 저장되었습니다. 미리보기 클릭 후, 우측 하단의 선택으로 이동합니다. (5초 후 저장)"
print(message)
time.sleep(5)
p4 = pyautogui.position()
message = "위치가 저장되었습니다. 선택 후 우측 상단의 완료로 이동합니다. (5초 후 저장)"
print(message)
time.sleep(5)
p5 = pyautogui.position()
message = "위치가 저장되었습니다. 완료 클릭 후 우측 상단의 게시로 이동합니다. (5초 후 저장)"
print(message)
time.sleep(5)
p6 = pyautogui.position()
message = "위치가 모두 locations.txt 파일에 저장되었습니다"
print(message)
time.sleep(2)
locations = [p1,p2,p3,p4,p5,p6]
# write each item as new line in txt
with open('locations.txt', 'w') as f:
for item in locations:
f.write(str(item[0]) + " " + str(item[1])+"\n")
코멘트
1. 위 코드로 인해서 사용자가 스스로 버튼의 위치를 txt 파일에 저장할 수 있다.
2. 실제 프로그램에서는 txt 파일의 x좌표, y좌표를 아래와 같은 helper function으로 불러오면 된다.
def get_locations():
myfile = r"absolute_path_of_txt"
saved_locations = []
with open(myfile, encoding='utf-8') as f:
for line in f:
tmp = line.rstrip().split(" ")
tmp = [int(i) for i in tmp]
saved_locations.append(tmp)
# change all to int
return saved_locations
'Code Snippets > 파이썬' 카테고리의 다른 글
[파이썬] 리스트에서 중복 값을 제거하는 2가지 방법 (0) | 2022.02.01 |
---|---|
[파이썬-셀레니움] 셀레니움 속도 향상을 위한 5가지 팁 (3) | 2021.07.23 |