キンサクプログラマー

お金儲けと技術のメモ

Macでマウス自動操作

そうだアプリを自動化しよう

そんなもくろみで開発を始めるものの、いつも「マウスの自動操作が・・・」っていう序盤の序盤でつまづいていた。しかし、ちゃんと調べればいくつか手段はあるようだ。
やりたいこととしては、

  1. PCとandroidを接続
  2. PC上に表示されるandroid画面をタッチで操作

1についてはググればすぐに見つかると思うので今回は割愛する。
ここでは、2のマウスをプログラムから操作する方法を2つ紹介する。

その1 swiftでマウス操作

僕がはじめに発見したのはこっちの方法だ。
自宅のPCがMacなのでそっち方面で調査していたらみつかった。

func moveCursor(point: CGPoint) {
       CGEventPost(CGEventTapLocation.CGHIDEventTap,       
       CGEventCreateMouseEvent(nil,   CGEventType.LeftMouseDown,
      point,
      CGMouseButton.Left))
}

moveCursor(CGPoint(x:30,y:400))
sleep(1)
moveCursor(CGPoint(x:30,y:700))

Objective-Cでも同様のAPIを叩けばできるようだ。
日本語のドキュメントがないので探すのは多少困難だが、Appleのサイト
Quartz Event Services Reference
を探せばいろいろできるってことだけはわかった。

その2 pythonでマウス自動操作

swiftでマウス自動操作を実現して歓喜していたが大きな課題にぶち当たることになる。
swiftOpenCV叩けるんだけっけ・・・」
あいにく、cocoapodsっていうパッケージマネージャーから取ってこれるみたいだが、
iOSのみでOSX用のものがない模様。スクリプトとか別言語で書いて無理やり連携するのもありだが、そこまですると心が折れそうなので別の手段を考えることにした。
そもそも、OpenCVを叩けるpythonにマウス自動操作のAPIがあるのではないか・・・

あった。

Mouse Control Functions — PyAutoGUI 1.0.0 documentation

こんな感じで超絶簡単に実現できる。

import pyautogui
pyautogui.moveTo(100, 200)
pyautogui.moveTo(500, 200)
pyautogui.moveTo(200, 100)

やるじゃん、python。俺たちにできない事を平然とやってのけるッ
まぁ、オートインデントできないのは許せないけどな。

これでOpenCVを使えば画像認識でクリックできちゃったりする。
そして、tensorflowで画像とクリック位置を学習させれば晴れて最強のフレームワークが完成となる。

完成する日は・・ 
遠い。