def click_button(button_name): button_path = screenshots_dir + button_name + '.png' pos = imagesearch(button_path) img = Image.open(button_path) if pos[0] != -1: click_image(button_path, pos, "left", 0.001, offset=5) img.close() print("Clicked: " + button_name) return True else: img.close() print("NOT Clicke: " + button_name) return False
def salir_de_duelo(self): while True: if self.detener.is_set( ): # Si se presiona el botón stop la busqueda se detiene return ok_button = imagesearch("images/pop_up_ok.jpg") next_button = imagesearch("images/Button_next.jpg") level_up_screen = imagesearch("images/level_up.jpg") dialogo = imagesearch("images/character_text.jpg") if ok_button[0] != -1: click_image("images/pop_up_ok.jpg", ok_button, "left", 0.2) sleep(2) elif next_button[0] != -1: click_image("images/Button_next.jpg", next_button, "left", 0.2) sleep(2) elif level_up_screen[0] != -1: click_image("images/level_up.jpg", level_up_screen, "left", 0.2) sleep(2) # Se detecta la pantalla de diálogo después del duelo y clickea hasta que el personaje # deja de hablar elif dialogo[0] != -1: while dialogo != [-1, -1]: if self.detener.is_set( ): # Si se presiona el botón stop la busqueda se detiene return click_image("images/character_text.jpg", dialogo, "left", 0.2) sleep(1) dialogo = imagesearch("images/character_text.jpg") elif imagesearch("images/Gate.jpg")[0] != -1: return
def cambiar_puerta_a_mundo(self, mundo): switch_gate_button_coord = imagesearch("images/switch_gate_button.jpg") while switch_gate_button_coord[0] == -1: if self.detener.is_set(): return switch_gate_button_coord = imagesearch( 'images/switch_gate_button.jpg.jpg') click_image("images/switch_gate_button.jpg", switch_gate_button_coord, "left", 0.2) if mundo == "dm": dm_icon = imagesearch('images/dsod_world_icon.jpg') while dm_icon[0] == -1: if self.detener.is_set(): return dm_icon = imagesearch('images/dm_world_icon.jpg') if dm_icon[0] != -1: break dsod_icon = imagesearch('images/dsod_world_icon.jpg') moveTo(dsod_icon) drag(0, 50, 0.5, button="left" ) # arrastra para mostrar por completo el icono del mundo click_image("images/dsod_world_icon.jpg", dm_icon, "left", 0.2) elif mundo == "dsod": dsod_icon = imagesearch('images/dsod_world_icon.jpg') while dsod_icon[0] == -1: if self.detener.is_set(): return dsod_icon = imagesearch('images/dsod_world_icon.jpg') click_image("images/dsod_world_icon.jpg", dsod_icon, "left", 0.2) elif mundo == "gx": gx_icon = imagesearch('images/gx_world_icon.jpg') while gx_icon[0] == -1: if self.detener.is_set(): return gx_icon = imagesearch('images/gx_world_icon.jpg') click_image("images/gx_world_icon.jpg", gx_icon, "left", 0.2) elif mundo == "5ds": _5ds_icon = imagesearch('images/5ds_world_icon.jpg') while _5ds_icon[0] == -1: if self.detener.is_set(): return _5ds_icon = imagesearch('images/5ds_world_icon.jpg') if _5ds_icon[0] != -1: break gx_icon = imagesearch('images/gx_world_icon.jpg') moveTo(gx_icon) drag(0, -50, 0.5, button="left" ) # arrastra para mostrar por completo el icono del mundo click_image("images/5ds_world_icon.jpg", _5ds_icon, "left", 0.2)
def clickear_puerta(self): if self.gate: coord_gate = imagesearch("images/gate_piece.jpg") while coord_gate[0] == -1: if self.detener.is_set(): return self.change_screen(to_gate=True) coord_gate = imagesearch("images/gate_piece.jpg") click_image("images/gate_piece.jpg", coord_gate, "left", 0.2) go_back_button = imagesearch('images/go_back_button.jpg') while go_back_button[0] == -1: if self.detener.is_set(): return click_image("images/gate_piece.jpg", coord_gate, "left", 0.2) sleep(2) go_back_button = imagesearch('images/go_back_button.jpg')
def buscar_en_puerta(self, duelista, nivel, mundo=None): if mundo == "dm": self.cambiar_puerta_a_mundo("dm") elif mundo == "dsod": self.cambiar_puerta_a_mundo("dsod") elif mundo == "gx": self.cambiar_puerta_a_mundo("gx") elif mundo == "5ds": self.cambiar_puerta_a_mundo("5ds") flecha_cambiar = imagesearch('images/flecha_cambiar_duelista.jpg') while flecha_cambiar[0] == -1: if self.detener.is_set(): return flecha_cambiar = imagesearch('images/flecha_cambiar_duelista.jpg') nombre_duelista = imagesearch(duelista, precision=0.9) while nombre_duelista[0] == -1: if self.detener.is_set(): return click_image('images/flecha_cambiar_duelista.jpg', flecha_cambiar, 'left', 0.2) sleep(2) nombre_duelista = imagesearch(duelista) nivel_duelista = imagesearch(nivel) if nivel_duelista[0] != -1: click_image(nivel, nivel_duelista, 'left', 0.2) coor_duel_button = imagesearch("images/duel_button.jpg") click_image("images/duel_button.jpg", coor_duel_button, "left", 0.2) sleep(2) dialogo = imagesearch("images/character_text.jpg") while dialogo[0] != [-1]: if self.detener.is_set( ): # Si se presiona el botón stop la busqueda se detiene return click_image("images/character_text.jpg", dialogo, "left", 0.2) sleep(1) dialogo = imagesearch("images/character_text.jpg") if imagesearch("images/duel_button.jpg")[0] != -1: break coor_duel_button = imagesearch("images/duel_button.jpg") click_image("images/duel_button.jpg", coor_duel_button, "left", 0.2)
def change_screen(self, to_gate=False): if to_gate: gate_coord = imagesearch("images/Gate_off.jpg") if gate_coord[0] != -1: click_image("images/Gate_off.jpg", gate_coord, "left", 0.2) self.gate = True self.shop = False self.pvp_arena = False self.duel_studio = False else: return else: if self.gate: pvp_coord = imagesearch("images/pvp_arena_off.jpg") click_image("images/pvp_arena_off.jpg", pvp_coord, "left", 0.2) self.gate = False self.shop = False self.pvp_arena = True self.duel_studio = False self.npc_searched = False elif self.pvp_arena: shop_coord = imagesearch("images/shop_off.jpg") click_image("images/shop_off.jpg", shop_coord, "left", 0.2) self.gate = False self.shop = True self.pvp_arena = False self.duel_studio = False elif self.shop: studio_coord = imagesearch("images/duel_studio_off.jpg") click_image("images/shop_off.jpg", studio_coord, "left", 0.2) self.gate = False self.shop = False self.pvp_arena = False self.duel_studio = True elif self.duel_studio: gate_coord = imagesearch("images/Gate_off.jpg") click_image("images/Gate_off.jpg", gate_coord, "left", 0.2) self.gate = True self.shop = False self.pvp_arena = False self.duel_studio = False self.npc_searched = True
def click_button_area(button_name, x1, y1, x2, y2): button_path = screenshots_dir + button_name + '.png' pos = imagesearch(button_path) img = Image.open(button_path) im = region_grabber(region=(x1, y1, x2, y2)) img_rgb = np.array(im) img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) template = cv2.imread(image, 0) # res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED) # min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) if pos[0] != -1: click_image(button_path, pos, "left", 0.001, offset=5) img.close() return True else: img.close() return False
800, 600, precision=0.8, im=im, prefix="assets/img/") imagesearcharea("panda.png", 0, 0, 800, 600, precision=0.8, im=im, prefix="assets/img/") print(str(time.clock() - time1) + " seconds (optimized)") # sample output : # 1.6233619831305721 seconds (non optimized) # 0.4075934110084374 seconds (optimized) # click image is to be used after having found the image pos = imagesearch("github.png", prefix="assets/img/") if pos[0] != -1: click_image("github.png", pos, "right", 0.2, prefix="assets/img/", offset=5)
def click(image, pos): return imagesearch.click_image(image, pos, 'left', 0.25)
def run(self): # ejecuta un loop infinito buscando las imágenes de la pantalla while True: for index, imagen in enumerate(self.image_list): if self.detener.is_set(): return # if self.tag_check.state() == ('selected',): # tag_duel = threading.Thread(target=self.tag_duel, daemon=True) # tag_duel.start() # tag_duel.join() self.pos = imagesearch(imagen, precision=0.9) if self.pos[0] == -1: print(imagen + " not found, waiting") sleep(0.1) else: # Si encuentra un personaje hablando clickea hasta que # se calle print(self.pos[0]) while index == 11: if self.detener.is_set(): return if imagesearch(imagen) == [-1, -1]: break else: click_image(imagen, imagesearch(imagen), "left", 0.2) sleep(1) # Al encontrar una imagen de la lista de # que no sean algunas de las 4 pantallas principales # clickea sobre ellas if index in {0, 1, 2, 3, 5, 6, 8, 12, 13}: click_image(imagen, self.pos, "left", 0.2) elif index in {7, 9, 10}: self.change_screen(to_gate=True) elif index == 4: self.imprimir_texto("Gate detected") self.gate = True self.shop = False self.pvp_arena = False self.duel_studio = False # checkear el mundo actual si no se ha hecho if not self.world_checked: checkear = threading.Thread( target=self.check_world, daemon=True) checkear.start() checkear.join() # Si el botón de buscar npc está marcado crea un nuevo hilo # para hacer la busqueda de npc y haciendo que la busqueda # principal de la pantalla espere a que la busqueda de npc # termine if self.npc_search_checkbox.state() == ('selected', ): self.imprimir_texto("Buscando npc...") if self.dm_world: search_npc = threading.Thread( target=self.npc_search(self.npcdm_list), daemon=True) search_npc.start() search_npc.join() elif self.gx_world: search_npc = threading.Thread( target=self.npc_search(self.npcgx_list), daemon=True) search_npc.start() search_npc.join() elif self._5ds_world: search_npc = threading.Thread( target=self.npc_search(self.npc5ds_list), daemon=True) search_npc.start() search_npc.join() if self.farm_button.state() == ('selected', ): farm = threading.Thread(target=self.farm_gate, daemon=True) farm.start() farm.join()
def npc_search(self, lista): npc_gate = False npc_pvp = False npc_shop = False npc_studio = False while self.npc_search_checkbox.state() == ('selected', ): if self.detener.is_set( ): # Si se presiona el botón stop la busqueda se detiene return # Busca los npc en la pantalla dados en la lista y al encontrar uno presiona el botón # autoduel luego espera a que el duelo termine para regresar a la pantalla y seguir # buscando npc Image_list = lista for imagen in Image_list: if self.detener.is_set( ): # Si se presiona el botón stop la busqueda se detiene return pos = imagesearch(imagen, precision=0.9) if pos[0] == -1: print(imagen + " not found, waiting") elif pos[0] != -1: print("npc encontrado") print(pos) click_image(imagen, pos, "left", 0.2) sleep(3) while imagesearch("images/auto_duel_button.jpg") == [ -1, -1 ]: # clickea hasta encontrar el botón auto-duel if self.detener.is_set(): return sleep(1) if imagesearch("images/character_text.jpg") != [ -1, -1 ]: click_image( "images/character_text.jpg", imagesearch("images/character_text.jpg"), "left", 0.2) sleep(1) else: break if imagesearch("images/auto_duel_button.jpg")[0] != -1: click_image("images/auto_duel_button.jpg", imagesearch("images/auto_duel_button.jpg"), "left", 0.2) # clickea el botón autoduel sleep(3) # Se busca de forma constante los botones ok y next para regresar a la pantalla # principal una vez finalizado el duelo self.salir_de_duelo() self.change_screen() if all((npc_gate, npc_pvp, npc_shop, npc_studio)): print( "Se ha completado la busqueda de todos los npc en este mundo" ) npc_gate = False npc_pvp = False npc_shop = False npc_studio = False return else: if npc_shop: npc_studio = True elif npc_pvp: npc_shop = True elif npc_gate: npc_pvp = True elif not npc_gate: npc_gate = True
def tag_duel(self): while True: # Busca el botón "tag duel" tag_button = imagesearch("images/tag_duel_button.jpg") # Idenficamos si estamos en la pantalla de elección de la copa cup = imagesearch("images/choose_cup.jpg") while tag_button[0] == -1: if self.detener.is_set( ): # Si se presiona el botón stop la busqueda se detiene return # En caso de recibir premio después del duelo se buscará # y presionará el botón ok ok_button = imagesearch("images/pop_up_ok.jpg") if ok_button[0] != -1: click_image("images/pop_up_ok.jpg", ok_button, "left", 0.2) elif cup[0] != -1: click_image("images/pop_up_ok.jpg", cup, "left", 0.2) tag_button = imagesearch("images/tag_duel_button.jpg") # Se clickeará el botóg "tag duel" hasta que ya no salga en pantalla while tag_button[0] != -1: if self.detener.is_set( ): # Si se presiona el botón stop la busqueda se detiene return click_image("images/tag_duel_button.jpg", tag_button, "left", 0.2) tag_button = imagesearch("images/tag_duel_button.jpg") # Hará los clicks correspondientes hasta que le botón de autoduel aparezca # en pantalla while imagesearch("images/auto_duel_button.jpg") == [ -1, -1 ]: # clickea hasta encontrar el botón auto-duel if self.detener.is_set(): return bonus_screen = imagesearch("images/tag_bonus40.jpg") dialogo = imagesearch("images/character_text.jpg") if bonus_screen[0] != -1: click_image("images/tag_bonus40.jpg", bonus_screen, "left", 0.2) elif dialogo[0] != -1: click_image("images/character_text.jpg", dialogo, "left", 0.2) elif imagesearch("images/choose_cup.jpg")[0] != -1: print("ga") break # clickeará el botón autoduel y luego buscará de forma constante # el botón "ok" que sale una vez finalizado el duelo y los # botones siguientes hasta quedar nuevamente en la pantalla # con el botón de "tag duel" if imagesearch("images/auto_duel_button.jpg")[0] != -1: click_image("images/auto_duel_button.jpg", imagesearch("images/auto_duel_button.jpg"), "left", 0.2) # clickea el botón autodue ok_button = imagesearch("images/pop_up_ok.jpg") while ok_button[0] == -1: if self.detener.is_set( ): # Si se presiona el botón stop la busqueda se detiene return ok_button = imagesearch("images/pop_up_ok.jpg") while True: if self.detener.is_set( ): # Si se presiona el botón stop la busqueda se detiene return ok_button = imagesearch("images/pop_up_ok.jpg") dialogo = imagesearch("images/character_text.jpg", precision=0.9) level_up_screen = imagesearch("images/level_up.jpg", precision=0.9) if ok_button[0] != -1: click_image("images/pop_up_ok.jpg", ok_button, "left", 0.2) sleep(1) elif level_up_screen[0] != -1: click_image("images/level_up.jpg", level_up_screen, "left", 0.2) sleep(1) elif dialogo[0] != -1: while dialogo != [-1, -1]: if self.detener.is_set( ): # Si se presiona el botón stop la busqueda se detiene return click_image("images/character_text.jpg", dialogo, "left", 0.2) sleep(1) dialogo = imagesearch("images/character_text.jpg") tag_button = imagesearch( "images/tag_duel_button.jpg") if tag_button[0] != -1: break break
def check_world(self): # Busca el botón de cambiar mundos y verifica en que mundo está # (cambiando la variable a True) dependiendo de cuales mundos aparezcan # en las imágenes una vez presionado el botón coord = None contador = 0 # Usado para recorrer cada imagen world_check_button = list( map(imagesearch, ("images/check_world_button.jpg", "images/check_world_button2.jpg", "images/check_world_button3.jpg", "images/check_world_button4.jpg", "images/check_world_button5.jpg", "images/check_world_button6.jpg", "images/check_world_button7.jpg", "images/check_world_button8.jpg", "images/check_world_button9.jpg", "images/check_world_button10.jpg", "images/check_world_button11.jpg", "images/check_world_button12.jpg", "images/check_world_button13.jpg"))) for cordx, cordy in world_check_button: if not -1 in {cordx, cordy}: x = cordx y = cordy coord = [x, y] break if contador == len(world_check_button) - 1: self.imprimir_texto( "no se encontró el botón para verificar el mundo") self.imprimir_texto( "se dará por hecho que se está en dm y por los npc buscados serán de este mundo" ) self.gx_world = False self._5ds_world = False self.dm_world = True self.world_checked = True return contador += 1 click_image("images/check_world_button.jpg", coord, "left", 0.1) if imagesearch("images/DSOD_world_check.jpg")[0] != -1: self.imprimir_texto("DSOD world desbloqueado") if imagesearch("images/gx_world_check.jpg")[0] != -1: self.imprimir_texto("Gx world desbloqueado") if imagesearch("images/5ds_world_check.jpg")[0] != -1: self.imprimir_texto("5ds world desbloqueado") if imagesearch_color("images/dm_world_selected.jpg", precision=0.9)[0] != -1: self.gx_world = False self._5ds_world = False self.dm_world = True self.DSOD_world = False self.world_checked = True self.imprimir_texto("Se encuentra en dm world") return if imagesearch("images/dm_world_check.jpg")[0] == -1: click_image("images/check_world_button.jpg", coord, "left", 0.1) if imagesearch_color("images/DSOD_world_selected.jpg", precision=0.9)[0] != -1: self.gx_world = False self._5ds_world = False self.dm_world = False self.DSOD_world = True self.world_checked = True self.imprimir_texto("Se encuentra en DOSD world") return if imagesearch("images/dm_world_check.jpg")[0] == -1: click_image("images/check_world_button.jpg", coord, "left", 0.1) if imagesearch_color("images/gx_world_selected.jpg", precision=0.9)[0] != -1: self.gx_world = True self._5ds_world = False self.dm_world = False self.DSOD_world = False self.world_checked = True self.imprimir_texto("Se encuentra en Gx world") return if imagesearch("images/dm_world_check.jpg")[0] == -1: click_image("images/check_world_button.jpg", coord, "left", 0.1) if imagesearch_color("images/5ds_world_selected.jpg", precision=0.9)[0] != -1: self.gx_world = False self._5ds_world = True self.dm_world = False self.DSOD_world = False self.world_checked = True self.imprimir_texto("Se encuentra en 5ds world") return