[업무 자동화 파이썬] pyautogui로 마우스 제어하기

반응형
    반응형

    pyautogui 마우스 제어

    pyautogui를 이용해 마우스 제어 하는 방법입니다. 다양한 방법이 있을줄 알지만 제가 아는 선에서 알려드릴까 합니다.

    마우스 컨트롤 기능

    pyautogui에서 제공하는 마우스 컨트롤 기능입니다. 이동, 클릭, 드래그 다 됩니다.

    1. moveTo(x,y,duration=None) : 지정된 좌표(x,y)로 마우스 이동
    2. move(x_offset=None,y_offset_=None,duration=None) : 현재 마우스 위치에서 상대적인 위치로 이동. x_offset,y_offset에 이동할 거리를 지정한다.
    3. click(x=None,y=None,clicks=1,interval=0.0,button='left',duration=None) : 마우스 클릭을 수행. interval을 이용해 클릭 시간을 조절할 수 있다.
    4. doubleClick(x=None,y=None,interval=0.0, button='left,duration=None) : 마우스를 더블클릭한다.
    5. rightClick(x=None,y=None,duration=None): 마우스 오른쪽 버튼을 클릭
    6. middleClick(x=None,y=None,duration=None) : 마우스 중간 버튼 클릭
    7. dragTo(x,y,duraiont=None) : 마우스를 지정된 위치로 드래그
    8. drag(x_offset,y_offset,duration=None) : 현재 마우스 위치에서 상대적인 위치로 드래그
    9. scroll(units): 스크롤 실행.
    10. position(): 현재 마우스 위치를 반환

     

    마우스 이동하면서 클릭하기

    마우스 좌표를 지정하면 어디든지 움직이면서 클릭할 수 있습니다. 특정 좌표에 마우스가 순간이동(?)하여 클릭을 합니다.

    import pyautogui
    import time
    
    
    # 이동할 좌표 리스트
    coordinates = [(100, 100), (200, 200), (300, 300)]
    
    # 각 좌표로 이동하며 클릭
    
    for coord in coordinates:
        pyautogui.moveTo(coord[0], coord[1])
        pyautogui.click()
        time.sleep(1)  # 1초 대기

    마우스 드래그하기

    마우스를 드래그하려면 마우스를 클릭한채로 두고 떼는 작업을 해야하는데 이것을 mousedown(), mouseup()을 통해 할 수 있습니다. 좌표를 지정해주면 지정한 곳까지 이동합니다.

    import pyautogui
    
    # 마우스 드래그할 시작점과 끝점 좌표
    
    start_x, start_y = 100, 100
    end_x, end_y = 2000, 2000
    
    
    
    # 시작점으로 이동 후 클릭
    
    pyautogui.moveTo(start_x, start_y)
    pyautogui.mouseDown()
    
    
    
    # 끝점으로 이동하여 드래그
    
    pyautogui.moveTo(end_x, end_y, duration=1)
    
    pyautogui.mouseUp()

     

    또는 dragTo를 이용합니다. dragTo에는 이미 mousedown()과 mouseup()기능이 있어서 따로 입력하지 않아도 됩니다.

    import pyautogui
    
    start_x, start_y = 100, 100
    end_x, end_y = 2000, 2000
    
    pyautogui.moveTo(start_x, start_y)  # 현재 위치에서 시작
    pyautogui.dragTo(end_x, end_y, duration=1)  #드래그

    마우스 스크롤하기

    마우스 스크롤하는 기능입니다. 마우스가 있는 창의 스크롤을 실행합니다. 

    import pyautogui
    
    # 100단위로 3번 아래로 스크롤
    pyautogui.scroll(-100, x=100, y=100)
    pyautogui.scroll(-100, x=100, y=100)
    pyautogui.scroll(-100, x=100, y=100)
    

     

    스크롤 하는동안에는 마우스 움직임은 내가 컨트롤 할 수 있지만 마우스위치에 있는 창을 알아서 스크롤해주기 때문에 완벽한 마우스 컨트롤을 위해서는 마우스를 지정한 곳에 옮긴후 스크롤을 실행하도록 설정해주어야 합니다.

     

    마우스 현재 위치 좌표 찍기

    마우스 현재 위치 좌표 찍는 방법입니다.

    import pyautogui
    # 마우스의 현재 위치 가져오기
    
    current_x, current_y = pyautogui.position()
    
    print(f"현재 마우스 위치: ({current_x}, {current_y})")

     

    현재 코딩은 작업시작시의 마우스 위치를 찍어서 출력해줍니다. 이벤트로서 수행하려면 코딩을 더 해주어야 합니다.

    예를 들어, 클릭을 할때만 좌표를 찍기, 특정 키보드를 누르면 좌표를 찍어주기 등 어떤 조건을 넣어서 많이 사용합니다. 예를 든 방법은 pyautogui만으로는 불가능한걸로 알고 있습니다. 이에 대한 방법에 대해서는 추후에 포스팅을 하겠습니다.

    마우스 컨트롤 종료하기

    마우스 컨트롤을 진행하다가 중간에 멈추고 싶다면 트리거를 주어야 합니다. 그런데 특정 키를 누르면 멈춰가 잘 안됩니다. 예기치 상황이 많이 발생하기 때문에 쉽지 않습니다. 특히, 마우스 이동시에는 마우스가 움직이고 있기 때문에 내 맘대로 컨트롤이 안되서 코딩 실행을 중단할 수가 없습니다.

    이런 것을 방지하고자 만들어진 안전 중단 설정입니다.

    import pyautogui
    pyautogui.FAILSAFE = True
    
    ## 마우스 컨트롤 코딩 작성

    활성화, 비활성화의 개념으로 마우스 컨트롤 코딩을 작성하기 전에 시작점에 안전중단 설정을 활성화(True)를 해놓으면 마우스를 컴퓨터 화면 밖으로 내보내면 자동 중단됩니다.

    실제로 마우스를 밖으로 내보내면 아래그림과 같이 TrackBack이 발생해 실행이 중단됩니다.

     

    마치며

    간단한 예시를 통해 pyautogui의 마우스 제어 방법을 알아보았는데요. 간단하게 마우스 이동, 클릭, 드래그를 할 수 있습니다. 이 기능만으로도 많은 자동화를 이룰 수 있습니다.

    하지만 이벤트 트리거에 의한 작업(조건에 따른 마우스 제어)은 실시간 마우스 감지를 해야합니다만 그런 기능은 pyautogui에서 제공하는 것 같지는 않습니다. 이에 대한 방법은 추후 포스팅을 하겠습니다.

     

    함께보면 좋은글

    [업무자동화] 윈도우 작업스케줄러 사용해 파이썬 실행하기

    핸드폰으로 컴퓨터 원격조종하기(구글 원격 데스크탑 사용기)

    [업무 자동화 파이썬] Listener를 이용한 마우스 이벤트 제어

    댓글

    Designed by JB FACTORY

    ....