Skip to Content
РазработчикамРазработка транзакции для STM-агента Lite (Playwright)

Разработка транзакции для STM-агента Lite (Playwright)

Предисловие

Для разработки кода транзакции для STM-агента установите Python 3.13.0. Также потребуются следующие зависимости:

ЗависимостьВерсия
Playwright1.53.0

Для удобства работы с инструментом Playwright рекомендуется установить среду разработки PyCharm или любую другую, поддерживающую работу с Python.

Генерация кода

Работа с Playwright Codegen

Создайте файл с расширением .py, для сохранения сгенерированного кода.

Для генерации кода для STM-агента используйте встроенный в Playwright инструмент Codegen. Чтобы воспользоваться инструментом, необходимо открыть командную строку в среде разработки и ввести следующую команду:

playwright codegen *сайт*

image

После выполнения команды откроется Chromium и Playwright Inspector.В Chromium выполняются действия, которые необходимо записать в STM-агент. Для остановки записи используется кнопка Record, выделенная на скриншоте:

image

После остановки записи скопируйте код из Playwright Inspector в ранее созданный Python файл.

image

Редактирование кода

Замена импорта

Для корректного вызова STM-агента замените импорт:

import re from playwright.sync_api import Playwright, sync_playwright, expect

на:

import asyncio from async_stm_agent_sdk import transaction_context

Редактирование функции

Замените синхронную функцию:

def run(playwright: Playwright) -> None:

на асинхронную:

async def tr_stm_run(): async with transaction_context() as (page, step, expect, log, logger, random, sleep):

Весь внутренний код должен быть сдвинут на один уровень табуляции.

Также замените запуск функции в конце кода с:

with sync_playwright() as playwright: run(playwright)

на:

asyncio.run(tr_stm_run())

Удаление вызова браузера

Для работы STM-агента, в отличии от Playwright, не требуется явный вызов и закрытие браузера, поэтому удалите из кода следующие строки:

browser = playwright.chromium.launch(headless=False) context = browser.new_context() page = context.new_page() ... # --------------------- context.close() browser.close()

На данном этапе должен получиться, примерно, следующий код, без упоминания Playwright:

import asyncio from async_stm_agent_sdk import transaction_context async def tr_stm_run(): async with transaction_context() as (page, step, expect, log, logger, random, sleep): page.goto("https://primo-rpa.ru/") page.get_by_role("button", name="Закрыть диалоговое окно").click() page.get_by_text("Современное решение для интеллектуальной обработки любых документов. Работает в ").click() page.locator("#rec1121802201").get_by_role("button", name="Запросить демо").click() page.get_by_role("dialog").locator("label").filter(has_text="Даю согласие на обработку своих персональных данных").locator("div").first.click() asyncio.run(tr_stm_run())

Добавление шагов

После очистки кода от упоминания Playwright, вы можете приступить к разбивке вашего кода на шаги. Для этого внутри кода транзакции вызовите асинхронную функцию:

async with step(step_name="*имя шага*"):

Если нужно добавить запись в лог конкретного шага, вызовите сразу две функции:

async with step(step_name="*имя шага*"): async with log("*запись в лог*"):

После этого поместите код, выполняемый внутри этого, внутрь функции, сместив его на один уровень табуляции, относительно последней функции.

Для каждого действия добавьте “await”.

Пример получившегося шага:

async with step(step_name="visit_primo_rpa_ru"): async with log("visit_primo-rpa.ru"): await page.goto("https://primo-rpa.ru/")

Отредактируйте весь оставшийся код.

В результате редактирования должен получиться следующий код:

import asyncio from async_stm_agent_sdk import transaction_context async def tr_stm_run(): async with transaction_context() as (page, step, expect, log, logger, random, sleep): async with step(step_name="visit_primo_rpa_ru"): async with log("visit_primo-rpa.ru"): await page.goto("https://primo-rpa.ru/") async with step(step_name="close_window"): async with log("close_window"): await page.get_by_role("button", name="Закрыть диалоговое окно").click() async with step(step_name="first_click"): async with log("first_click"): await page.get_by_text("Современное решение для интеллектуальной обработки любых документов. Работает в ").click() async with step(step_name="request_demo"): async with log("request_demo"): await page.locator("#rec1121802201").get_by_role("button", name="Запросить демо").click() async with step(step_name="personal_data"): async with log("personal_data"): await page.get_by_role("dialog").locator("label").filter(has_text="Даю согласие на обработку своих персональных данных").locator("div").first.click() asyncio.run(tr_stm_run())
Last updated on