PyAutoGUI를 사용한 자동화 -입문편 - ~D&D나 스크롤등의 마우스 조작도 간단하게~

소개



PyAutoGUI (Python의 GUI 자동화 모듈)를 사용하여 자크리와 어떤 일을 할 수 있는지 알아 보았습니다.
PyAutoGUI는 Sikuli와 같이 이미지로 매칭시켜 조종합니다.
공식 문서 : htps : // 피우토구이. Red d. cs. 이오 / 엔 / 아 st /

공식 문서를 보면 여러가지 할 수 있는 일은 있을 것 같습니다만,
본 기사에서는 개인적으로 흥미가 있던 마우스 조작의 곳을 실제로 코드 써 보려고 생각합니다.

환경



본 기사는 이하의 환경에서 동작을 확인한 것입니다.
  • OS : macOS Mojave (10.14.2)
  • 브라우저 : Google 크롬 (72.0.3626.109)
  • Python : 3.6.3

  • OS 보안 설정 변경


  • 다음 절차에 따라 터미널 추가
  • 시스템 환경 설정> 보안 및 개인 정보 보호 설정> 내게 필요한 옵션> + (추가 버튼)> 터미널

  • 그렇지 않으면 PyAutoGUI에서 마우스 좌표를 얻을 수 있지만 커서를 이동하거나 클릭 할 수 없습니다.
  • Pyautogui doesn't seem to work on macOS Mojave


  • PyAutoGUI 설치


    $ pip install pyobjc-core
    $ pip install pyobjc
    $ pip install pyautogui
    
    ## ブラウザを立ち上げてGUIを操作もできるようにするため、
    ## Seleniumとchromedriverのインストールもしておきます
    $ pip install selenium
    $ pip install chromedriver-binary
    

    브라우저에 표시된 페이지를 PyAutoGUI로 조작해보기



    다음 코드에서는 브라우저를 시작하고 페이지를 열 때까지 Selenium을 사용하여
    그 외의 조작은 PyAutoGUI로 하고 있습니다.
    물론, Selenium 단체에서도 같은 조작이 가능합니다.
    이미지 기반이므로 요소의 셀렉터를 조사하거나 등은 일절하지 않아도 됩니다.

    Yahoo!의 톱 페이지로부터 주간 일기 예보를 열람하는 코드 예에 소개합니다.

    Yahoo!의 톱 페이지


    소스 코드


    import pyautogui as pyautogui
    from selenium import webdriver
    import chromedriver_binary
    
    ## Yahoo!のトップページを開く
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://www.yahoo.co.jp/')
    
    ## 「天気・災害」のリンクを開く
    x,y = pyautogui.locateCenterOnScreen('weather.png')
    pyautogui.moveTo(x, y)
    pyautogui.click(x, y)
    
    ## 週間予報が表示されるように少し縦にスクロールする
    pyautogui.vscroll(-5)
    
    ## 範囲を指定して週間予報の部分のスクリーンショットを取得する
    screenshot = pyautogui.screenshot(region=(225, 225, 650, 450))
    screenshot.save('yahoo_weather.png')
    
    driver.quit()
    

    「날씨・재해」의 링크를 검출하기 위한 화상


    획득한 스크린샷(yahoo_weather.png)


    데스크톱 앱에서 마우스 조작 시도



    RICOH THETA의 PC용 애플리케이션
    다음 마우스 조작을 시도했습니다.
  • 마우스 커서 이동
  • 드래그 앤 드롭
  • 클릭
  • 스크롤

  • 움직이는 것을 보신 분이 알기 쉽기 때문에 동영상을 찍었습니다.
    하고 있는 것은 코드에 해설을 넣고 있습니다.



    소스 코드


    import pyautogui as pyautogui
    from time import sleep 
    
    # サンプル画像の位置を取得し、マウスカーソルを移動させる
    x,y = pyautogui.locateCenterOnScreen('sample.png')
    pyautogui.moveTo(x, y)
    
    # ドロップエリアの位置を取得し、ドロップエリアにドラッグ&ドロップ
    drop_area_x, drop_area_y = pyautogui.locateCenterOnScreen('drop_area.png')
    pyautogui.dragTo(drop_area_x, drop_area_y, 1, button='left')
    sleep(1) # 画像がロードされるまで待機
    
    # ドラッグ・スクロール操作で表示された全天球画像のビューを変更
    pyautogui.mouseDown(drop_area_x + 300, drop_area_y, button='left') # 左クリック押しっぱなし
    pyautogui.dragTo(drop_area_x - 300, drop_area_y, 1, button='left') # 左方向へ回転
    sleep(1) # 動きをみやすくするために操作毎に1秒の待機処理を挟む
    pyautogui.dragTo(drop_area_x - 300, drop_area_y + 200, 1, button='left') # 上方向へ回転
    pyautogui.mouseUp(x, y, button='left') # 左クリック解放
    sleep(1)
    pyautogui.scroll(10, drop_area_x, drop_area_y) # ズームイン
    sleep(1)
    pyautogui.scroll(-20, drop_area_x, drop_area_y) # ズームアウト
    sleep(1)
    

    마우스 조작은 대체로 할 수 있습니다! 다만, 스스로 코드를 쓰고 있어 깨달은 적이 있었습니다.
    검색을 위해 준비할 이미지를 크게 하면 검색 처리가 느려지므로, 특정할 수 있는 정도로 작은 범위에서 이미지를 준비하는 것을 추천합니다.
    키보드 조작은 이번 전혀 접하고 있지 않기 때문에, 다음 번 또 써 보려고 합니다!

    반나절, PyAutoGUI에서 놀아 보는 감상입니다.
    자동화 도구로는 도입하는 장애물이 높은 것도 아니고, 사용성이 나쁜 것도 아닌 것 같기 때문에
    활용하는 장면은 상당히 있다고 생각합니다.
    전에 Sikuli를 사용한 자동화에 대해서, 공부회에서 화상 인식에 상당히 노력하지 않으면 안 된다고 (들)물었습니다만, 인식되지 않아 곤란하다고 하는 것은 없었습니다.

    좋은 웹페이지 즐겨찾기