PyAutoGUI를 사용한 자동화 -입문편 - ~D&D나 스크롤등의 마우스 조작도 간단하게~
소개
PyAutoGUI (Python의 GUI 자동화 모듈)를 사용하여 자크리와 어떤 일을 할 수 있는지 알아 보았습니다.
PyAutoGUI는 Sikuli와 같이 이미지로 매칭시켜 조종합니다.
공식 문서 : htps : // 피우토구이. Red d. cs. 이오 / 엔 / 아 st /
공식 문서를 보면 여러가지 할 수 있는 일은 있을 것 같습니다만,
본 기사에서는 개인적으로 흥미가 있던 마우스 조작의 곳을 실제로 코드 써 보려고 생각합니다.
환경
본 기사는 이하의 환경에서 동작을 확인한 것입니다.
OS 보안 설정 변경
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를 사용한 자동화에 대해서, 공부회에서 화상 인식에 상당히 노력하지 않으면 안 된다고 (들)물었습니다만, 인식되지 않아 곤란하다고 하는 것은 없었습니다.
Reference
이 문제에 관하여(PyAutoGUI를 사용한 자동화 -입문편 - ~D&D나 스크롤등의 마우스 조작도 간단하게~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/oh_rusty_nail/items/e7f39a6fc3624ac9ff09텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)