1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/diankai-rpa

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Инструмент для упаковки и публикации RPA для программистов

Почему это нужно

  1. На рынке существует множество инструментов RPA, таких как UiPath, UiBot. А также Alibaba Cloud и Huawei Cloud предоставляют свои собственные наборы инструментов разработки RPA. Однако для программистов использование этих инструментов, которые часто упакованы, не всегда удобно. Программисты предпочитают напрямую работать с кодом. Кроме того, среды выполнения ботов для этих инструментов являются платными продуктами.
  2. Программисты могут легко реализовать различные процессы RPA с помощью Python, Selenium, PyWin32 и других библиотек и фреймворков, но нет простого решения для публикации этих процессов для конечных пользователей RPA.

Что предоставляется

  1. Простой Python-скрипт для загрузки, выполнения и упаковки среды, который можно упаковать в exe для публикации.
  2. Простой и универсальный графический интерфейс, который можно объявить в Python-скрипте.

Как использовать

  1. Создайте скрипт в папке scripts, например:

     hello_world.py
  2. Реализуйте скрипт

    from runtime.flow import ScriptDef, FileItem
    from lib.log import logger
    from lib import excel
    from runtime.m import retry
    
    def reset():
        logger.info("RESET")
    
    @retry(num_times=3, sleep_time=1, reset_func=reset)
    def print_item(item):
        logger.info(item)
        raise Exception("111")
    ```    def run(excel_file):
        data = excel.loads2dict(excel_file)
        for item in data:
            print_item(item)
            
    export = ScriptDef(
                func=run,
                group="Другое",
                title="Тестовый процесс Excel",
                arguments=[
                    FileItem(title="файл Excel", name="excel_file")
                ]   
            )
    ```3. Использование на основе класса:
    
    ```python
    from lib.log import logger
    from runtime.flow import ScriptDef, StringItem
    
    class SayHello(object):
        def __init__(self, name):
            super().__init__()
            self.name = name
    
        def run(self):
            logger.info(f"Привет {self.name}!")
    
    export = ScriptDef(
                cls=SayHello,
                group="DEMO",
                title="Привет, мир!",
                arguments=[
                    StringItem(title="Имя", name="name"),
                ]   
            ) 
  3. Запуск тестирования

     python launch.py 

введите описание изображения здесь введите описание изображения здесь

Подробное описание

Реализация GUI

GUI интерфейс реализован с использованием VUE, код находится в директории gui, управление пакетами осуществляется с помощью yarn

cd gui/rpa-bot
yarn dev

Используется pywebview для загрузки и отображения

Описание класса Flow

Для выполнения скрипта потока достаточно определить метод run, но рекомендуется использовать встроенный класс Flow, который определяет следующие методы

class Flow(object):

    def precheck(self):  
        # Проверка параметров и данных перед фактическим выполнением потока, особенно важна для задач, выполняемых по расписанию, позволяет обнаружить возможные ошибки в данных
        pass

    def prefun(self):
        # Операции, выполняемые перед выполнением run
        pass
```    def run(self):
        # Code for thread execution
        pass

    def afterfun(self):
        # Operations to be performed after run execution
        pass

In real scenarios, many threads load an Excel table and perform actions row by row. For such tasks, the basic classes ListDataFlow and MultDataFlow are provided, which implement basic mechanisms for scheduling tasks, error handling, and retry attempts. All such threads can inherit from the ListDataFlow class, for example, the following thread for mass email sending.```python
class Mail(object):
    mail: str # электронная почта
    name: str # имя
    text: str # текст письма
    def __str__(self):
        return f"{self.mail}"
    
class SendMail(ListDataFlow):
    def __init__(self, excel_file):
        self.excel_file = excel_file
    def load_list(self):
        # Этот метод загружает данные для обработки, обычно это загрузка таблицы, возвращаемый объект Item должен иметь определённый метод __str__,
        # который возвращает информацию, которая может быть использована для описания задачи
        # Верхний уровень использует этот метод для записи ошибок
        return excel.load(self.excel_file, Item, {})
    def run_job(self, item):
        # Этот метод выполняет конкретную задачу, если возникает ошибка, она должна быть выброшена, верхний уровень кода будет её перехватывать и записывать в журнал ошибок
        # send_mail(item.mail, item.text)
    def reset(self):
        # Этот метод используется для сброса состояния при возникновении ошибки, например, перезапуск браузера или перезаход, чтобы следующая задача могла быть выполнена
        pass
```### Формы GUI

В настоящее время доступны следующие элементы формы:

1. StringItem
  
    Основной текстовый ввод

    StringItem(title="Имя", name="name")

2. NumberItem

    Числовое поле ввода

    NumberItem(title="Число", name="number")

3. FileItem

    Поле выбора файла

    FileItem(title="Excel таблица", name="excel_file")

4. DirectoryItem

    Поле выбора директории

    DirectoryItem(title="Папка", name="image_dir")

5. SelectItem

    Поле выбора из списка

    SelectItem(title="Целевой URL", name="url", options=[
            "http://baidu.com",
            "http://google.com"
        ]),

6. UserSelectItem

    Поле выбора пользователя, обратите внимание, что по умолчанию файл с учетными записями и паролями читается из C:\RPA\аккаунт.xlsx

    UserSelectItem(title="Аккаунт", username_field="name", password_field="pwd"),

### Компиляция и упаковка

1. Все зависимости, которые загружаются во всех скриптах, должны быть объявлены для импорта в файле runtime\load.py. Это необходимо для упаковки pyinstaller, чтобы он включил их. Объявленные часто используемые зависимости приведены ниже:

    ```python
    import win32
    import jinja2
    import requests
    import openpyxl
    import xlrd
    import selenium
    import fitz
    import cv2
    import numpy
    import PIL
    import imutils
    import docxtpl
    import pdfplumber
    import Crypto
    import pyperclip
    import pynput
    ```

2. Чтобы опубликовать определенные скрипты, можно изменить конфигурацию в файле build.py:

    ```python
    ENV_CONFIG = {
        "default": ["hello_world.py"],
    }
    ```

    Затем выполните

    ```bash
    python build.py default
    ```

3. Обычно, если зависимости не изменились, не требуется заново упаковывать и публиковать exe. Достаточно обновить скрипты в директории scripts для публикации.## Несколько базовых библиотек

### Использование LOG библиотеки

```python
from lib.log import logger
logger.info("msg")
logger.error("msg", stack_info=True)

Сохранение прогресса и ошибок

from lib import snapshot
snapshot.save_check_point("taskname", "progress")
snapshot.save_error("taskname", ["e1", "e2"])

Быстрое чтение Excel

from lib import excel

class Item(object):
    idcard: str
    username: str
    time_number: str
    lian_approver: str

items = excel.loads("Файл.xlsx", Item, {
    "idcard": {"title": "Идентификатор заявителя", "required": True},
    "username": {"title": "Имя заявителя", "required": True},
    "time_number": {"title": "Дата оплаты", "required": True},
    "lian_approver": {"title": "Инициатор дела", "required": True}
})

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Библиотека инструментов RPA для программистов, предоставляющая простые и удобные решения для упаковки и публикации. Развернуть Свернуть
MulanPSL-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/diankai-rpa.git
git@api.gitlife.ru:oschina-mirror/diankai-rpa.git
oschina-mirror
diankai-rpa
diankai-rpa
main