0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python 自動デスクトップクリック

Last updated at Posted at 2020-11-14

背景

自動でクリックしたいときってありますよね。

このプログラムはクリックしたい画像や入力したい項目をスクショしておくだけで、自動でクリックや入力をしてくれるように作りました。

スクショするときは、画像をリサイズしないように気を付けてください。

細かい説明はごめんなさい🙇
あと汚いコードでごめんなさい🙇
お好きなように、皆さん改造してください。
誰かがこちらをGUI化してくれることを祈ります(涙)

ソフトウェアエンジニアなら、ソフトウェアの力を借りて楽に生きよう~。

ターゲット画像の遷移 3段階

  1. デスクトップからターゲットを探す -> クリック
  2. デスクトップからターゲットを探す -> クリック
  3. デスクトップからターゲットを探す -> "Qiita"と入力
    X_Dammy_5.png

実行結果

fl7a5-yoz3n.gif

サンプルコード

Auto_Click.py
import numpy as np
import pyautogui
import imutils
import time
import cv2

class AUTO_DKK(): # p

    def __init__(self):
        self.max_val_of_TH = 0.9
        self.show_width = 300
        self.show_height = 300
        self.time_counter = 5

    def set_template_img(self, tmp_file_name):
        self.tmp = cv2.imread(tmp_file_name)
        self.tmp_, self.tmp_w, self.tmp_h = self.tmp.shape[::-1]

    def show_tmp(self):
        if self.tmp_w > self.tmp_h :
            cv2.imshow("Template", imutils.resize(self.tmp, width=self.show_height))
            print("self.tmp_w > self.tmp_h", self.tmp_w, self.tmp_h)
        else :
            cv2.imshow("Template", imutils.resize(self.tmp, height=self.show_width))
            print("self.tmp_w < self.tmp_h", self.tmp_w, self.tmp_h)
        cv2.waitKey(1)

    def get_screenshoot_image_for_cv(self):
        self.img = pyautogui.screenshot()
        self.img = cv2.cvtColor(np.array( self.img ), cv2.COLOR_RGB2BGR)

    def detect_target(self):
        res = cv2.matchTemplate(self.img, self.tmp, cv2.TM_CCOEFF_NORMED)
        self.min_val, self.max_val, self.min_loc, self.max_loc = cv2.minMaxLoc(res)

    def over_SH_or_not(self):
        if self.max_val > self.max_val_of_TH :
            print("\rDetect Target : Point = {:.4}".format(self.max_val), end="")
            return True
        else :
            print("\rNo Detect Target : Point = {:.4}".format(self.max_val), end="")
            return False

    def count_down_3_2_1(self):
        print()
        for i in range(self.time_counter):
            print("\rMove mouse, Count Down : {} s".format(self.time_counter - int(i)), end="")
            time.sleep(1)
        print()
        print("Go on target")

    def move_to_terget_point(self):
        top_left = self.max_loc
        btm_right = (top_left[0] + self.tmp_w, top_left[1] + self.tmp_h)
        x_center = int((top_left[0] + btm_right[0])/2)
        y_center = int((top_left[1] + btm_right[1])/2)
        self.terget_point = (x_center, y_center)
        pyautogui.moveTo(self.terget_point[0], self.terget_point[1])

    def input_text_word(self, intput_word):
        self.word = intput_word

    def choice_option(self, option):
        if option == "input_text" :
            pyautogui.click()
            time.sleep(0.1)
            pyautogui.typewrite(self.word, interval = 0.5)
            pyautogui.press('enter')
        elif option == "one_click" :
            pyautogui.click()
        elif option == "double_click" :
            pyautogui.doubleClick()

    def doubleclick_target(self):
        pyautogui.doubleClick()

    def oneclick_target(self):
        pyautogui.click()()

a_dkk = AUTO_DKK()
tmp_file_name = ["dammy_1.png",  "dammy_2.png",  "dammy_3.png"] # dammy_1
tmp_file_name = ["X_dammy_1.png",  "X_dammy_2.png",  "X_dammy_3.png"] # dammy_1
CHOICE_       = ["double_click", "double_click", "input_text"]#input_text
input_word    = ["",              "",            "Qiita"]#input_text
""" choice_option
* input_text
* one_click
* double_click
"""

for t_f_n, choise_, i_w in zip(tmp_file_name, CHOICE_, input_word):
    a_dkk.set_template_img(t_f_n)
    a_dkk.show_tmp()
    while True:
        a_dkk.get_screenshoot_image_for_cv()
        a_dkk.detect_target()
        Judgement = a_dkk.over_SH_or_not()
        if Judgement :
            a_dkk.count_down_3_2_1()
            a_dkk.move_to_terget_point()
            if choise_ == "input_text" :
                a_dkk.input_text_word(i_w)
            a_dkk.choice_option(choise_)
            break
    print("Next")
    time.sleep(1)
0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?