pyautogui:继续尝试直到找到图片

问题描述 投票:0回答:1

[如何在屏幕的特定位置搜索图像,以不超过'x'秒的持续时间进行搜索,直到找到图像?如果找不到该图像,则返回False;如果找到该图像,则返回找到的位置的坐标...也可以自动单击它。

当等待来自加载的网页的特定视觉响应时,此功能就是“完成”的触发器。我创建的自动化操作仅基于可视化操作来浏览网站,因此不应将libs用作请求或硒。 lib pyautogui是我发现的最好的工具,但是它的方法非常初级(仅关注基本知识),我无法创建更多实用的功能。

python pyautogui
1个回答
0
投票
也许会帮助您。下面有一个非常灵活的方法,可以在小范围内进行连续和优化的搜索。我试图使文档字符串尽可能地可读。如果您觉得该功能不够清晰,请告诉我,我将改进文档字符串。

import logging import pyautogui as pag from PIL import Image import time def pag_suf(img, x, y, margin, clicks=0, duration=0, interval=0, debug_msg='', time_limit=None, sample_dump=None): """ Pyautogui - Search Until Find Searches the image indefinitely at a specific point on the screen considering as the search area, the image size plus an expansion margin. If found, you can click on the center of the image. :param img: String. Fullpath image | List. List of Fullpath image :param x: coordinate x :param y: coordinate y :param margin: Integer. expansion margin to expand the search area :param clicks: Integer. number of clicks :param duration: Float. duration of mouse movement :param interval: Float. sleep time after click :param time_limit: Integer. Time limit in seconds :param debug_msg: String. Debug message to identify log :param sample_dump: String. File name if image .bmp :return: List. Coordinates of the center of the found image. | False. If time_limit reached. """ is_string = type(img) == str list_img = [] if is_string: list_img.append(img) else: list_img = img # Search for image at the indicated location with tolerance margins retorno = None logging.debug(f"{debug_msg}: Finding...") first_loop = True start_time = time.time() while retorno is None: # Scape in time_limit if time_limit is not None: elapsed_time = time.time() - start_time if elapsed_time > time_limit: return False else: pass else: pass if first_loop is False: time.sleep(0.5) else: first_loop = False for img in list_img: im = Image.open(img) # Defining variables img_width, img_height = im.size coor_x = x - img_width / 2 - margin coor_y = y - img_height / 2 - margin region_x = img_width + margin * 2 region_y = img_height + margin * 2 # Save collected sample screen_amostra = pag.screenshot(imageFilename=sample_dump, region=(coor_x, coor_y, region_x, region_y)) retorno = pag.locate(img, screen_amostra) if retorno is not None: # logging.debug(img) break logging.debug(f"{debug_msg}: Found.") click_x = coor_x + retorno[0] + img_width / 2 click_y = coor_y + retorno[1] + img_height / 2 # Click on the center of the found location if clicks != 0: pag.click(click_x, click_y, clicks, duration=duration, interval=interval) click_arr = [] click_arr.append(click_x) click_arr.append(click_y) return click_arr

© www.soinside.com 2019 - 2024. All rights reserved.