Screen very well!

dev-linux
Ivan Maslov 2 years ago
parent 908131cda5
commit d5392c32ad

@ -7,7 +7,10 @@ from . import Mouse
if CrossOS.IS_WINDOWS_BOOL: if CrossOS.IS_WINDOWS_BOOL:
from pywinauto import win32defines, win32structures, win32functions from pywinauto import win32defines, win32structures, win32functions
import time
IMAGE_WAIT_SEC_FLOAT = 60
IMAGE_WAIT_INTERVAL_SEC_FLOAT = 1.0
def BoxCreate(inTopInt:int, inLeftInt:int, inHeightInt:int, inWidthInt:int) -> pyscreeze.Box: def BoxCreate(inTopInt:int, inLeftInt:int, inHeightInt:int, inWidthInt:int) -> pyscreeze.Box:
@ -489,7 +492,7 @@ def ImageLocateAll(inImgPathStr:str, inIsGrayModeBool:bool=False, inConfidenceFl
# Screen: Взаимодействие с объектами экрана # Screen: Взаимодействие с объектами экрана
from pyOpenRPA.Robot import Screen from pyOpenRPA.Robot import Screen
Screen.LocateAll(inImgPathStr="Button.png",inConfidenceFloat=0.9) Screen.ImageLocateAll(inImgPathStr="Button.png",inConfidenceFloat=0.9)
:param inImgPathStr: Путь к изображению, которое требуется искать на экране :param inImgPathStr: Путь к изображению, которое требуется искать на экране
:type inImgPathStr: str, относительный или абсолютный :type inImgPathStr: str, относительный или абсолютный
@ -500,4 +503,110 @@ def ImageLocateAll(inImgPathStr:str, inIsGrayModeBool:bool=False, inConfidenceFl
:return: Список из pyscreeze.Box :return: Список из pyscreeze.Box
:rtype: list :rtype: list
""" """
return pyautogui.locateAllOnScreen(image = inImgPathStr, grayscale = inIsGrayModeBool, confidence = inConfidenceFloat) lResult = []
for lItem in pyautogui.locateAllOnScreen(image = inImgPathStr, grayscale = inIsGrayModeBool, confidence = inConfidenceFloat):
lResult.append(lItem)
return lResult
def ImageExists(inImgPathStr:str, inIsGrayModeBool:bool=False, inConfidenceFloat:float=1.0) -> list:
"""Проверить, имеется ли на экране хотя бы один подходящий объект. Вернуть булево значение
.. code-block:: python
# Screen: Взаимодействие с объектами экрана
from pyOpenRPA.Robot import Screen
lResult = Screen.ImageExists(inImgPathStr="Button.png",inConfidenceFloat=0.9)
:param inImgPathStr: Путь к изображению, которое требуется искать на экране
:type inImgPathStr: str, относительный или абсолютный
:param inIsGrayModeBool: True - выполнить поиск изображения в режиме серых оттенков (ускоряет производительность, если допускается искажение цвета). По умолчанию False
:type inIsGrayModeBool: bool, опционально
:param inConfidenceFloat: Показатель точности. 1.0 - идентичное соответствие, 0.0 - полное несоответствие. По умолчанию 1.0
:type inConfidenceFloat: float, опционально
:return: Список из pyscreeze.Box
:rtype: list
"""
return len(ImageLocateAll(inImgPathStr=inImgPathStr,inIsGrayModeBool=inIsGrayModeBool, inConfidenceFloat=inConfidenceFloat))>0
def ImageWaitAppear(inImgPathStr:str, inWaitSecFloat:float=IMAGE_WAIT_SEC_FLOAT, inWaitIntervalSecFloat:float = IMAGE_WAIT_INTERVAL_SEC_FLOAT, inIsGrayModeBool:bool=False, inConfidenceFloat:float=1.0) -> list:
"""Ожидать появление изображения на протяжении inWaitSecFloat секунд. Проверять с периодичностью inWaitIntervalSecFloat. Вернуть список прямоугольных областей, которые удовлетворяют условию
.. code-block:: python
# Screen: Взаимодействие с объектами экрана
from pyOpenRPA.Robot import Screen
lBoxList = Screen.ImageWaitAppear(inImgPathStr="Button.png",inConfidenceFloat=0.9)
:param inImgPathStr: Путь к изображению, которое требуется искать на экране
:type inImgPathStr: str, относительный или абсолютный
:param inWaitSecFloat: Время ожидания появления изображения в сек. По умолчанию IMAGE_WAIT_SEC_FLOAT (60)
:type inWaitSecFloat: float, опциональный
:param inWaitIntervalSecFloat: Интервал повторной проверки наличия изображения. По умолчанию IMAGE_WAIT_INTERVAL_SEC_FLOAT (1)
:type inWaitIntervalSecFloat: float, опциональный
:param inIsGrayModeBool: True - выполнить поиск изображения в режиме серых оттенков (ускоряет производительность, если допускается искажение цвета). По умолчанию False
:type inIsGrayModeBool: bool, опционально
:param inConfidenceFloat: Показатель точности. 1.0 - идентичное соответствие, 0.0 - полное несоответствие. По умолчанию 1.0
:type inConfidenceFloat: float, опционально
:return: Список из pyscreeze.Box или [] если прошло время ожидания.
:rtype: list
"""
lStartSecFloat = time.time()
lResultList=[]
while time.time() - lStartSecFloat < inWaitSecFloat:
lResultList = ImageLocateAll(inImgPathStr=inImgPathStr,inIsGrayModeBool=inIsGrayModeBool, inConfidenceFloat=inConfidenceFloat)
if len(lResultList)>0: break
time.sleep(inWaitIntervalSecFloat)
return lResultList
def ImageWaitDisappear(inImgPathStr:str, inWaitSecFloat:float=IMAGE_WAIT_SEC_FLOAT, inWaitIntervalSecFloat:float = IMAGE_WAIT_INTERVAL_SEC_FLOAT, inIsGrayModeBool:bool=False, inConfidenceFloat:float=1.0):
"""Ожидать исчезновение изображения на протяжении inWaitSecFloat секунд. Проверять с периодичностью inWaitIntervalSecFloat.
.. code-block:: python
# Screen: Взаимодействие с объектами экрана
from pyOpenRPA.Robot import Screen
Screen.ImageWaitDisappear(inImgPathStr="Button.png",inConfidenceFloat=0.9)
:param inImgPathStr: Путь к изображению, которое требуется искать на экране
:type inImgPathStr: str, относительный или абсолютный
:param inWaitSecFloat: Время ожидания появления изображения в сек. По умолчанию IMAGE_WAIT_SEC_FLOAT (60)
:type inWaitSecFloat: float, опциональный
:param inWaitIntervalSecFloat: Интервал повторной проверки наличия изображения. По умолчанию IMAGE_WAIT_INTERVAL_SEC_FLOAT (1)
:type inWaitIntervalSecFloat: float, опциональный
:param inIsGrayModeBool: True - выполнить поиск изображения в режиме серых оттенков (ускоряет производительность, если допускается искажение цвета). По умолчанию False
:type inIsGrayModeBool: bool, опционально
:param inConfidenceFloat: Показатель точности. 1.0 - идентичное соответствие, 0.0 - полное несоответствие. По умолчанию 1.0
:type inConfidenceFloat: float, опционально
"""
lStartSecFloat = time.time()
lResultList=[]
while time.time() - lStartSecFloat < inWaitSecFloat:
lResultList = ImageLocateAll(inImgPathStr=inImgPathStr,inIsGrayModeBool=inIsGrayModeBool, inConfidenceFloat=inConfidenceFloat)
if len(lResultList)==0: break
time.sleep(inWaitIntervalSecFloat)
return lResultList
def ImageClick(inImgPathStr:str,inBoxIndexInt:int = 0, inPointRuleStr:str="CC", inIsGrayModeBool:bool=False, inConfidenceFloat:float=1.0):
"""Выполнить поиск прямоугольной области по изображению.
.. code-block:: python
# Screen: Взаимодействие с объектами экрана
from pyOpenRPA.Robot import Screen
Screen.ImageClick(inImgPathStr="Button.png",inConfidenceFloat=0.9)
:param inImgPathStr: Путь к изображению, которое требуется искать на экране
:type inImgPathStr: str, относительный или абсолютный
:param inBoxIndexInt: Индекс прямоугольной области, по которой выполнить клик (если обнаружено несколько областей Box), По умолчанию 0
:type inBoxIndexInt: int, опционально
:param inPointRuleStr: Правило идентификации точки на прямоугольной области (правила формирования см. выше). Варианты: "LU","CU","RU","LC","CC","RC","LD","CD","RD". По умолчанию "CC"
:type inPointRuleStr: str, опциональный
:param inIsGrayModeBool: True - выполнить поиск изображения в режиме серых оттенков (ускоряет производительность, если допускается искажение цвета). По умолчанию False
:type inIsGrayModeBool: bool, опционально
:param inConfidenceFloat: Показатель точности. 1.0 - идентичное соответствие, 0.0 - полное несоответствие. По умолчанию 1.0
:type inConfidenceFloat: float, опционально
"""
PointClick(BoxGetPoint(inBox=ImageLocateAll(inImgPathStr=inImgPathStr,inIsGrayModeBool=inIsGrayModeBool,inConfidenceFloat=inConfidenceFloat)[inBoxIndexInt],inPointRuleStr=inPointRuleStr))

Loading…
Cancel
Save