Programming/Errors

[오류 해결] 맥북에서 pyautogui.locateonscreen 안 될 때

Brian Go 2021. 9. 30. 18:47

 

맥북으로 바꾼 뒤에 pyautogui를 이용해서 데스크탑 자동화를 해보려고 했는데,

이런저런 난관이 많았다.

 

그 중에서 하나, locateonscreen이 값을 주는데도

클릭이나 moveTo가 안되는 현상에 대해서 알아보자 !

 

(참고로 dock에 있는 이미지는 locate가 안 된다. 왜인지는 구글링으로도 잘 안 나오는데,

이미지 자체를 인식을 못 하는듯.)

 


pyautogui로 배경화면에서 유튜브를 찾아서 더블클릭 해보자.

Youtube.png이고, 절대 경로를 locateonscreen에 넣어줬다.

나는 fn키를 배경화면 보이기로 해놓아서 fn키를 누르고 시작하겠다.

 

pyautogui.hotkey('fn')
time.sleep(2)
img = pyautogui.locateCenterOnScreen('/Users/gohyun/Desktop/Youtube.png')
print(img)
pyautogui.click(img[0], img[1], clicks=2)

 

이런 모양의 코드가 될 것. 그런데 이걸 아무리 실행시켜봐도 클릭은 되지 않는다.

그리고 Print된 값에는 Point(x=2017, y=800) 가 있다. 어 이상하다? 내 해상도는 1440x900인데?

(해상도는 print(pyautogui.size()) 로 출력해볼 수 있다.)

그러면 해상도를 넘어가는 x값이 나온 것.

 

이를 조금 구글링해보면, Retina 디스플레이는 좌표에 x2를 해서 나온다고 한다. split pixel을 한다고 하는데,

자세히까지는 모르겠고.

 

그러면 우리가 해줄 일은 좌표를 반으로만 나눠주면 되겠다!

img = pyautogui.locateCenterOnScreen('/Users/gohyun/Desktop/Youtube.png')
print(img)
pyautogui.click(img[0]/2, img[1]/2, clicks=2)

 

그나저나 pyautogui 자체가 맥북에서 좀 안 돌아가는 것 같다.

hotkey도 어떤 건 되고 어떤 건 안되고, keydown과 keyup을 섞어도 작동되지 않는 게 있으며,

click도 좀 시원찮다. time.sleep도 좀 씹히는 경우가 있는 것 같고..

 

찾아봐도 별다른 해결법은 보이지 않는다. 아직 M1맥북이 그렇게 자리잡지 못해서 그런가.ㅠㅠ