From bd8ddb0b214ce97df476aa2cb80130945ff36661 Mon Sep 17 00:00:00 2001 From: Vladislav Klychkov Date: Mon, 6 Mar 2023 11:17:56 +0300 Subject: [PATCH] new browser options + PagePrint --- Sources/pyOpenRPA/Robot/UIWeb.py | 49 +++++++++++++++++++++++++++++-- Tools/Jupyter-notebooks/start.cmd | 2 +- changelog.md | 2 ++ 3 files changed, 50 insertions(+), 3 deletions(-) diff --git a/Sources/pyOpenRPA/Robot/UIWeb.py b/Sources/pyOpenRPA/Robot/UIWeb.py index 32d34f6d..da5043cd 100755 --- a/Sources/pyOpenRPA/Robot/UIWeb.py +++ b/Sources/pyOpenRPA/Robot/UIWeb.py @@ -3,6 +3,7 @@ from selenium import webdriver, common from selenium.webdriver.common.by import By import os import sys +import json from pyOpenRPA.Tools import CrossOS import time @@ -14,7 +15,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) -> webdriver.Chrome: +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. .. code-block:: python @@ -32,6 +33,10 @@ def BrowserChromeStart(inDriverExePathStr:str = None, inChromeExePathStr:str = N :type inExtensionPathList: list, опционально :param inProfilePathStr: Путь, по которому выполнить сохранения профиля Chrome (история, куки и т.д.), по умолчанию None (профиль не сохраняется) :type inProfilePathStr: str, опционально + :param inSaveAsPDFBool: Флаг, который обеспечивает настройки окна печати вэб-страницы как "Сохранить как PDF", по умолчанию False (настройки по умолчанию) + :type inSaveAsPDFBool: bool, опционально + :param inSavefileDefaultDirStr: Путь, по которому выполнить сохранения файла (после работы с окном печать вэб-страницы браузера) (история, куки и т.д.), по умолчанию None (файл не сохраняется) + :type inSavefileDefaultDirStr: str, опционально :return: Объект браузера Google Chrome :rtype: webdriver.Chrome """ @@ -54,8 +59,31 @@ def BrowserChromeStart(inDriverExePathStr:str = None, inChromeExePathStr:str = N if CrossOS.IS_WINDOWS_BOOL: inChromeExePathStr = os.path.join(lResourcePathStr, "WChrome64-840414730", "App", "Chrome-bin", "chrome.exe") elif CrossOS.IS_LINUX_BOOL: inChromeExePathStr = os.path.join(lResourcePathStr, "LChrome64-10305060114", "data", "chrome") if inExtensionPathList == None: inExtensionPathList = [] - # Set full path to exe of the chrome + # Установка настроек окна печати, если необходимо lWebDriverChromeOptionsInstance = webdriver.ChromeOptions() + if inSaveAsPDFBool == True and inSavefileDefaultDirStr is not None: + print_settings = { + "recentDestinations": [{ + "id": "Save as PDF", + "origin": "local", + "account": "", + }], + "selectedDestinationId": "Save as PDF", + "version": 2, # в chrome - это номер варинта "сохранить как PDF" + "isHeaderFooterEnabled": False, # хедеры HTML на странице + "isLandscapeEnabled": False # ориентация (True - альбомная) + } + prefs = {'printing.print_preview_sticky_settings.appState': json.dumps(print_settings), + "download.prompt_for_download": False, + "profile.default_content_setting_values.automatic_downloads": 1, + "download.default_directory": inSavefileDefaultDirStr, + "savefile.default_directory": inSavefileDefaultDirStr, + "download.directory_upgrade": True, + "safebrowsing.enabled": True} + + lWebDriverChromeOptionsInstance.add_experimental_option('prefs', prefs) + lWebDriverChromeOptionsInstance.add_argument('--kiosk-printing') + # Set full path to exe of the chrome lWebDriverChromeOptionsInstance.binary_location = inChromeExePathStr #lWebDriverChromeOptionsInstance2 = webdriver.ChromeOptions() if inProfilePathStr is not None: @@ -107,6 +135,23 @@ def PageOpen(inURLStr: str): """ global gBrowser if gBrowser is not None: gBrowser.get(inURLStr) + +def PagePrint(): + """L+,W+: Открыть окно печати браузера. + + .. code-block:: python + + # UIWeb: Взаимодействие с ui web + from pyOpenRPA.Robot import UIWeb + import time + UIWeb.BrowserChromeStart() + UIWeb.PageOpen("https://mail.ru") + time.sleep(1) + UIWeb.PagePrint() + UIWeb.BrowserClose() + + """ + PageJSExecute(inJSStr=f"window.print()") def PageScrollTo(inVerticalPxInt=0, inHorizontalPxInt=0): """L+,W+: Выполнить прокрутку страницы (по вертикали или по горизонтали) diff --git a/Tools/Jupyter-notebooks/start.cmd b/Tools/Jupyter-notebooks/start.cmd index 6f9fbd43..84e86ddf 100755 --- a/Tools/Jupyter-notebooks/start.cmd +++ b/Tools/Jupyter-notebooks/start.cmd @@ -1,3 +1,3 @@ chcp 65001 call init-python-env.cmd jupyter-notebook.exe jupyter-notebook.exe -jupyter-notebook.exe -m notebook --notebook-dir=%~dp0 \ No newline at end of file +jupyter-notebook.exe -m notebook --notebook-dir="%~dp0 \ No newline at end of file diff --git a/changelog.md b/changelog.md index ce53e791..a8055e93 100755 --- a/changelog.md +++ b/changelog.md @@ -24,6 +24,8 @@ AGT - AGENT - - Возможность авторизации в формате login@domain - РОБОТ - - Убрали лишний print из Screen.BoxAnchorRuleCheck +- - pyOpenRPA.Robot.UIWeb.BrowserChromeStart - добавлен флаг печати в PDF и директория для сохранения при инициализации браузера +- - Добавлена новая функция - pyOpenRPA.Robot.UIWeb.PagePrint. Вызывает окно печати браузера. [1.3.1] - ОРКЕСТРАТОР