From 15c617d94822a9b0178e62d57bc8b3795c09a8e1 Mon Sep 17 00:00:00 2001 From: Vladislav Klychkov Date: Mon, 13 Mar 2023 15:49:20 +0300 Subject: [PATCH] + sphinx docs UIWeb fix --- Sources/pyOpenRPA/Robot/UIWeb.py | 78 ++++++++++++++++++++++++-------- changelog.md | 5 +- 2 files changed, 63 insertions(+), 20 deletions(-) diff --git a/Sources/pyOpenRPA/Robot/UIWeb.py b/Sources/pyOpenRPA/Robot/UIWeb.py index 088a01e0..8c59e09e 100755 --- a/Sources/pyOpenRPA/Robot/UIWeb.py +++ b/Sources/pyOpenRPA/Robot/UIWeb.py @@ -16,7 +16,7 @@ UIO_WAIT_INTERVAL_SEC_FLOAT = 1.0 gBrowser:webdriver.Chrome = None def BrowserChromeStart(inDriverExePathStr:str = None, inChromeExePathStr:str = None, inExtensionPathList:list = None, inProfilePathStr:str=None, inSaveAsPDFBool = False, inSavefileDefaultDirStr = None) -> webdriver.Chrome: - """L+,W+: Выполнить запуск браузера Chrome. Если вы скачали pyOpenRPA вместе с репозиторием, то будет использоваться встроенный браузер Google Chrome. Если установка pyOpenRPA производилась другим способом, то требуется указать расположение браузера Google Chrome и соответствующего WebDriver. + """L+,W+: Выполнить запуск браузера Chrome. Если вы скачали pyOpenRPA вместе с репозиторием, то будет использоваться встроенный браузер Google Chrome. Если установка pyOpenRPA производилась другим способом, то требуется указать расположение браузера Google Chrome и соответствующего WebDriver .. code-block:: python @@ -122,6 +122,8 @@ def BrowserChange(inBrowser): def PageOpen(inURLStr: str): """L+,W+: Открыть страницу inURLStr в браузере и дождаться ее загрузки. + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver + .. code-block:: python # UIWeb: Взаимодействие с ui web @@ -139,6 +141,8 @@ def PageOpen(inURLStr: str): def PagePrint(): """L+,W+: Открыть окно печати браузера. + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver + .. code-block:: python # UIWeb: Взаимодействие с ui web @@ -155,6 +159,8 @@ def PagePrint(): def PageScrollTo(inVerticalPxInt=0, inHorizontalPxInt=0): """L+,W+: Выполнить прокрутку страницы (по вертикали или по горизонтали) + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver .. code-block:: python @@ -174,6 +180,8 @@ def PageScrollTo(inVerticalPxInt=0, inHorizontalPxInt=0): def PageJSExecute(inJSStr, *inArgList): """L+,W+: Отправить на выполнение на сторону браузера код JavaScript. + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver !ВНИМАНИЕ! Данная функция поддерживает передачу переменных в область кода JavaScript (*inArgList). Обратиться к переданным переменным из JavaScript можно с помощью ключевого слова: arguments[i], где i - это порядковый номер переданной переменной @@ -214,6 +222,8 @@ def BrowserClose(): def UIOSelectorList(inUIOSelectorStr, inUIO=None) -> list: """L+,W+: Получить список UIO объектов по UIO селектору. + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver .. code-block:: python @@ -221,7 +231,7 @@ def UIOSelectorList(inUIOSelectorStr, inUIO=None) -> list: from pyOpenRPA.Robot import UIWeb UIWeb.BrowserChromeStart() UIWeb.PageOpen("https://mail.ru") - lUIOSelectorStr = "//*[@id=\"grid\"]/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" + lUIOSelectorStr = "//*[@id=\'grid\']/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" lUIOList = UIWeb.UIOSelectorList(inUIOSelectorStr = lUIOSelectorStr) UIWeb.BrowserClose() @@ -249,6 +259,8 @@ def UIOSelectorList(inUIOSelectorStr, inUIO=None) -> list: def UIOSelectorFirst(inUIOSelectorStr, inUIO=None) -> list: """L+,W+: Получить UIO объект по UIO селектору. + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver .. code-block:: python @@ -256,7 +268,7 @@ def UIOSelectorFirst(inUIOSelectorStr, inUIO=None) -> list: from pyOpenRPA.Robot import UIWeb UIWeb.BrowserChromeStart() UIWeb.PageOpen("https://mail.ru") - lUIOSelectorStr = "//*[@id=\"grid\"]/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" + lUIOSelectorStr = "//*[@id=\'grid\']/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" lUIO = UIWeb.UIOSelectorFirst(inUIOSelectorStr = lUIOSelectorStr) UIWeb.BrowserClose() @@ -274,6 +286,8 @@ def UIOSelectorFirst(inUIOSelectorStr, inUIO=None) -> list: def UIOTextGet(inUIO) -> str: """L+,W+: Получить текст UI элемента. + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver .. code-block:: python @@ -281,7 +295,7 @@ def UIOTextGet(inUIO) -> str: from pyOpenRPA.Robot import UIWeb UIWeb.BrowserChromeStart() UIWeb.PageOpen("https://mail.ru") - lUIOSelectorStr = "//*[@id=\"grid\"]/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" + lUIOSelectorStr = "//*[@id=\'grid\']/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" lUIO = UIWeb.UIOSelectorList(inUIOSelectorStr = lUIOSelectorStr)[0] lTextStr = UIWeb.UIOTextGet(inUIO=lUIO) UIWeb.BrowserClose() @@ -295,6 +309,8 @@ def UIOTextGet(inUIO) -> str: def UIOAttributeGet(inUIO, inAttributeStr) -> str: """L+,W+: Получить обычный (нестилевой) атрибут у UI элемента. + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver .. code-block:: python @@ -302,7 +318,7 @@ def UIOAttributeGet(inUIO, inAttributeStr) -> str: from pyOpenRPA.Robot import UIWeb UIWeb.BrowserChromeStart() UIWeb.PageOpen("https://mail.ru") - lUIOSelectorStr = "//*[@id=\"grid\"]/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" + lUIOSelectorStr = "//*[@id=\'grid\']/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" lUIO = UIWeb.UIOSelectorList(inUIOSelectorStr = lUIOSelectorStr)[0] UIWeb.UIOAttributeGet(inUIO=lUIO, inAttributeStr = "href") UIWeb.BrowserClose() @@ -318,6 +334,8 @@ def UIOAttributeGet(inUIO, inAttributeStr) -> str: def UIOAttributeStyleGet(inUIO, inAttributeStr) -> str: """L+,W+: Получить стилевой атрибут у UI элемента. + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver .. code-block:: python @@ -325,7 +343,7 @@ def UIOAttributeStyleGet(inUIO, inAttributeStr) -> str: from pyOpenRPA.Robot import UIWeb UIWeb.BrowserChromeStart() UIWeb.PageOpen("https://mail.ru") - lUIOSelectorStr = "//*[@id=\"grid\"]/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" + lUIOSelectorStr = "//*[@id=\'grid\']/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" lUIO = UIWeb.UIOSelectorList(inUIOSelectorStr = lUIOSelectorStr)[0] UIWeb.UIOAttributeStyleGet(inUIO=lUIO, inAttributeStr = "href") UIWeb.BrowserClose() @@ -341,6 +359,8 @@ def UIOAttributeStyleGet(inUIO, inAttributeStr) -> str: def UIOAttributeSet(inUIO, inAttributeStr, inValue): """L+,W+: Установить обычный (нестилевой) атрибут у UI элемента. + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver .. code-block:: python @@ -348,7 +368,7 @@ def UIOAttributeSet(inUIO, inAttributeStr, inValue): from pyOpenRPA.Robot import UIWeb UIWeb.BrowserChromeStart() UIWeb.PageOpen("https://mail.ru") - lUIOSelectorStr = "//*[@id=\"grid\"]/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" + lUIOSelectorStr = "//*[@id=\'grid\']/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" lUIO = UIWeb.UIOSelectorList(inUIOSelectorStr = lUIOSelectorStr)[0] UIWeb.UIOAttributeSet(inUIO=lUIO, inAttributeStr = "href", inValue = "https://mail.ru") UIWeb.BrowserClose() @@ -366,6 +386,8 @@ def UIOAttributeSet(inUIO, inAttributeStr, inValue): def UIOAttributeRemove(inUIO, inAttributeStr): """L+,W+: Удалить обычный (нестилевой) атрибут у UI элемента. + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver .. code-block:: python @@ -373,7 +395,7 @@ def UIOAttributeRemove(inUIO, inAttributeStr): from pyOpenRPA.Robot import UIWeb UIWeb.BrowserChromeStart() UIWeb.PageOpen("https://mail.ru") - lUIOSelectorStr = "//*[@id=\"grid\"]/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" + lUIOSelectorStr = "//*[@id=\'grid\']/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" lUIO = UIWeb.UIOSelectorList(inUIOSelectorStr = lUIOSelectorStr)[0] UIWeb.UIOAttributeRemove(lUIO, "href") UIWeb.BrowserClose() @@ -389,6 +411,8 @@ def UIOAttributeRemove(inUIO, inAttributeStr): def UIOAttributeStyleSet(inUIO, inAttributeStr, inValue): """L+,W+: Установить стилевой атрибут у UI элемента. + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver .. code-block:: python @@ -396,7 +420,7 @@ def UIOAttributeStyleSet(inUIO, inAttributeStr, inValue): from pyOpenRPA.Robot import UIWeb UIWeb.BrowserChromeStart() UIWeb.PageOpen("https://mail.ru") - lUIOSelectorStr = "//*[@id=\"grid\"]/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" + lUIOSelectorStr = "//*[@id=\'grid\']/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" lUIO = UIWeb.UIOSelectorList(inUIOSelectorStr = lUIOSelectorStr)[0] UIWeb.UIOAttributeStyleSet(inUIO=lUIO, inAttributeStr = "color", inValue = "grey") UIWeb.BrowserClose() @@ -414,6 +438,8 @@ def UIOAttributeStyleSet(inUIO, inAttributeStr, inValue): def UIOAttributeStyleRemove(inUIO, inAttributeStr:str): """L+,W+: Удалить стилевой атрибут у UI элемента. + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver .. code-block:: python @@ -421,7 +447,7 @@ def UIOAttributeStyleRemove(inUIO, inAttributeStr:str): from pyOpenRPA.Robot import UIWeb UIWeb.BrowserChromeStart() UIWeb.PageOpen("https://mail.ru") - lUIOSelectorStr = "//*[@id=\"grid\"]/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" + lUIOSelectorStr = "//*[@id=\'grid\']/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" lUIO = UIWeb.UIOSelectorList(inUIOSelectorStr = lUIOSelectorStr)[0] UIWeb.UIOAttributeStyleRemove(lUIO, "color") UIWeb.BrowserClose() @@ -437,6 +463,8 @@ def UIOAttributeStyleRemove(inUIO, inAttributeStr:str): def UIOClick(inUIO): """L+,W+: Выполнить нажатие по элементу inUIO. + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver .. code-block:: python @@ -444,7 +472,7 @@ def UIOClick(inUIO): from pyOpenRPA.Robot import UIWeb UIWeb.BrowserChromeStart() UIWeb.PageOpen("https://mail.ru") - lUIOSelectorStr = "//*[@id=\"grid\"]/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" + lUIOSelectorStr = "//*[@id=\'grid\']/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" lUIO = UIWeb.UIOSelectorList(inUIOSelectorStr = lUIOSelectorStr)[0] UIOClick(inUIO = lUIO) UIWeb.BrowserClose() @@ -456,6 +484,8 @@ def UIOClick(inUIO): def UIOSelectorHighlight(inUIOSelectorStr: str, inIsFirst:bool=False, inDurationSecFloat:float=3.0, inColorStr:str="green"): """L+,W+: Выполнить подсвечивание UI элемента с селектором inUIOSelectorStr. + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver .. code-block:: python @@ -463,7 +493,7 @@ def UIOSelectorHighlight(inUIOSelectorStr: str, inIsFirst:bool=False, inDuration from pyOpenRPA.Robot import UIWeb UIWeb.BrowserChromeStart() UIWeb.PageOpen("https://mail.ru") - lUIOSelectorStr = "//*[@id=\"grid\"]/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" + lUIOSelectorStr = "//*[@id=\'grid\']/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" UIWeb.UIOSelectorHighlight(inUIOSelectorStr = lUIOSelectorStr) UIWeb.BrowserClose() @@ -512,6 +542,8 @@ def UIOSelectorHighlight(inUIOSelectorStr: str, inIsFirst:bool=False, inDuration def UIOSelectorClick(inUIOSelectorStr: str): """L+,W+: Выполнить нажатие по элементу с селектором inUIOSelectorStr. + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver .. code-block:: python @@ -519,7 +551,7 @@ def UIOSelectorClick(inUIOSelectorStr: str): from pyOpenRPA.Robot import UIWeb UIWeb.BrowserChromeStart() UIWeb.PageOpen("https://mail.ru") - lUIOSelectorStr = "//*[@id=\"grid\"]/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" + lUIOSelectorStr = "//*[@id=\'grid\']/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" UIWeb.UIOSelectorClick(inUIOSelectorStr = lUIOSelectorStr) UIWeb.BrowserClose() @@ -533,6 +565,8 @@ def UIOSelectorClick(inUIOSelectorStr: str): def UIOSelectorSetValue(inUIOSelectorStr: str, inValue: str): """L+,W+: Установить значение элемента с селектором inUIOSelectorStr. + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver .. code-block:: python @@ -557,14 +591,16 @@ def UIOSelectorSetValue(inUIOSelectorStr: str, inValue: str): def UIOSelectorWaitAppear(inUIOSelectorStr:str, inWaitSecFloat:float=UIO_WAIT_SEC_FLOAT, inWaitIntervalSecFloat:float = UIO_WAIT_INTERVAL_SEC_FLOAT): """L+,W+: Ожидать появление UI элемента на веб странице (блокирует выполнение потока), заданного по UIO селектору inUIOSelectorStr. Выполнять ожидание на протяжении inWaitSecFloat (по умолчанию 60 сек.). Проверка производится с интервалом inWaitIntervalSecFloat (по умолчанию 1 сек.) - + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver + .. code-block:: python # UIWeb: Взаимодействие с ui web from pyOpenRPA.Robot import UIWeb UIWeb.BrowserChromeStart() UIWeb.PageOpen("https://mail.ru") - lUIOSelectorStr = "//*[@id=\"grid\"]/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" + lUIOSelectorStr = "//*[@id=\'grid\']/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" lAppearUIOList = UIWeb.UIOSelectorWaitAppear(inUIOSelectorStr = lUIOSelectorStr) UIWeb.BrowserClose() @@ -589,14 +625,16 @@ def UIOSelectorWaitAppear(inUIOSelectorStr:str, inWaitSecFloat:float=UIO_WAIT_SE def UIOSelectorWaitDisappear(inUIOSelectorStr:str, inWaitSecFloat:float=UIO_WAIT_SEC_FLOAT, inWaitIntervalSecFloat:float = UIO_WAIT_INTERVAL_SEC_FLOAT): """L+,W+: Ожидать исчезновение UI элемента с веб страницы (блокирует выполнение потока), заданного по UIO селектору inUIOSelectorStr. Выполнять ожидание на протяжении inWaitSecFloat (по умолчанию 60 сек.). Проверка производится с интервалом inWaitIntervalSecFloat (по умолчанию 1 сек.) - + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver + .. code-block:: python # UIWeb: Взаимодействие с ui web from pyOpenRPA.Robot import UIWeb UIWeb.BrowserChromeStart() UIWeb.PageOpen("https://mail.ru") - lUIOSelectorStr = "//*[@id=\"grid\"]/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" + lUIOSelectorStr = "//*[@id=\'grid\']/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" UIWeb.UIOSelectorWaitDisappear(inUIOSelectorStr = lUIOSelectorStr) UIWeb.BrowserClose() @@ -628,7 +666,7 @@ def UIOSelectorDetect(inUIOSelectorStr:str) -> str: # UIWeb: Взаимодействие с ui web from pyOpenRPA.Robot import UIWeb lUIOSelectorStr = "#grid > div.grid-middle > div.grid__main-col.svelte-2y66pa > div.grid_newscol.grid_newscol__more-pulse.svelte-1yvqfic > div.grid__ccol.svelte-1yvqfic > ul > li:nth-child(5) > div > a" - lUIOSelectorStr = "//*[@id=\"grid\"]/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" + lUIOSelectorStr = "//*[@id=\'grid\']/div[2]/div[2]/div[3]/div[1]/ul/li[5]/div/a" lResultStr = UIWeb.UIOSelectorDetect(inUIOSelectorStr = lUIOSelectorStr) :param inUIOSelectorStr: XPATH или CSS селектор UI объекта на web странице. Подсказки по CSS: https://devhints.io/css Подсказки по XPath: https://devhints.io/xpath @@ -648,6 +686,8 @@ def UIOSelectorDetect(inUIOSelectorStr:str) -> str: def UIOMouseSearchInit(): """L+,W+: Инициализирует процесс поиска UI элемента с помощью мыши. Для прекращения поиска необходимо использовать функцию: UIOMouseSearchReturn + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver .. code-block:: python @@ -675,6 +715,8 @@ def UIOMouseSearchInit(): def UIOMouseSearchReturn(): """L+,W+: Возвращает UIO объект, над которым находится указатель мыши. Предварительно должна быть вызвана функция UIWeb.UIOMouseSearchInit + + !ВНИМАНИЕ! Для работы необходимо проинициализировать webdriver .. code-block:: python diff --git a/changelog.md b/changelog.md index 8f223ea8..f3c0b046 100755 --- a/changelog.md +++ b/changelog.md @@ -12,8 +12,9 @@ AGT - AGENT - ОБЩЕЕ - - Utils: Disk - подготовка файлов / папок, если они не обнаружены (полезно при первом запуске, если требуются БД/ Файлы хранилищ) - - Jupyter: запуск из директорий, пути к которым содержат пробелы -- - PyOpenRPA: autodocsumm - добавлено к пакетам. -- - Исправлено неправильное поведение оркестратора при авторизации в браузере Firefox. +- - PyOpenRPA: autodocsumm - добавлено к пакетам +- - Исправлено неправильное поведение оркестратора при авторизации в браузере Firefox +- - Исправлено описание функци в документации, раздел UIWeb - ОРКЕСТРАТОР - - Исправление совместимости URL путей с некорыми ресурсами для отработки в LINUX - - Поддержка многотысячной аудитории, одновременно работающей в панели управления (async server-data server-log with fastapi)