背景
自動でクリックしたいときってありますよね。
このプログラムはクリックしたい画像や入力したい項目をスクショしておくだけで、自動でクリックや入力をしてくれるように作りました。
スクショするときは、画像をリサイズしないように気を付けてください。
細かい説明はごめんなさい🙇
あと汚いコードでごめんなさい🙇
お好きなように、皆さん改造してください。
誰かがこちらをGUI化してくれることを祈ります(涙)
ソフトウェアエンジニアなら、ソフトウェアの力を借りて楽に生きよう~。
ターゲット画像の遷移 3段階
実行結果
サンプルコード
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)