Conjunto de utilitários e configurações para facilitar o desenvolvimento de RPA com Python.
Project description
utils_rpa
Conjunto de utilitários e configurações para facilitar o desenvolvimento de RPA (Robotic Process Automation) com Python.
Instalação
pip install utils-rpa
Alguns recursos dependem de bibliotecas extras (Selenium/Playwright). Instale conforme o que for usar:
pip install "utils-rpa[selenium]" # resolução de captcha via Selenium
pip install "utils-rpa[playwright]" # resolução de captcha via Playwright
pip install "utils-rpa[all]" # todos os extras
Requisitos
- Python >= 3.12
Ferramentas disponíveis
configure_logger— logger pronto (console + arquivo rotativo).retry_with_logging— decorator de retentativa com logging.capture_screen— screenshot da tela inteira do computador.extract_inputs— extrai os campos de um formulário HTML.anti_captcha— resolução de Cloudflare Turnstile e captcha de imagem.
configure_logger
Cria um logger que escreve no console e em um arquivo rotativo (via concurrent-log-handler, seguro para múltiplos processos/threads). Por padrão salva em ./logs, com arquivos de até 5 MB e 3 backups.
from utils_rpa import configure_logger
logger = configure_logger("meu_bot")
logger.info("Iniciando automação")
logger.warning("Algo suspeito aconteceu")
logger.error("Falha ao processar item")
Personalizando os parâmetros:
import logging
from utils_rpa import configure_logger
logger = configure_logger(
"meu_bot",
log_dir="./logs",
file_name="bot.log",
max_bytes=10 * 1024 * 1024, # 10 MB
backup_count=5,
level=logging.DEBUG,
)
Saída (formato padrão, sem milissegundos):
2026-07-02 14:04:14 | INFO | Iniciando automação
Dica: use
logger.exception("...")dentro de um blocoexceptpara registrar o traceback automaticamente.
retry_with_logging
Decorator que reexecuta a função quando ela lança uma exceção, registrando cada tentativa no logger. Defaults: 5 tentativas, 1 segundo entre elas, logging ativado.
from utils_rpa import retry_with_logging
@retry_with_logging("meu_bot", attempts=3, delay=2)
def baixar_relatorio():
# ... código que pode falhar (rede, elemento não carregado, etc.)
return http_get("https://exemplo/relatorio")
# Tenta até 3 vezes, aguardando 2s entre as falhas.
# Se todas falharem, a última exceção é propagada.
relatorio = baixar_relatorio()
Sem logging:
@retry_with_logging(attempts=5, delay=1, use_log=False)
def tarefa_silenciosa():
...
capture_screen
Tira um print da tela inteira do computador (todos os monitores por padrão), salvando um PNG. Como captura a tela toda, o print inclui qualquer navegador aberto.
from utils_rpa import capture_screen
# Salva em ./screenshots com nome por timestamp e retorna o caminho
caminho = capture_screen()
print(caminho) # ex.: screenshots/screenshot_20260702_140414_123456.png
# Definindo o arquivo de saída
capture_screen("prints/tela.png")
# Capturando apenas o monitor principal (1 = principal, 2 = segundo, ...)
capture_screen(monitor=1)
extract_inputs
Recebe um objeto BeautifulSoup e extrai os campos do formulário como se ele fosse submetido, retornando um dicionário {name: value}. Aplica a lógica de um navegador: input/textarea/select com name, radios e checkboxes apenas quando marcados, e a option selecionada nos select.
from bs4 import BeautifulSoup
from utils_rpa import extract_inputs
html = """
<form>
<input type="text" name="usuario" value="maria">
<input type="hidden" name="token" value="abc123">
<input type="radio" name="genero" value="F" checked>
<input type="radio" name="genero" value="M">
<input type="checkbox" name="termos" value="ok" checked>
<textarea name="observacao">alguma nota</textarea>
<select name="estado">
<option value="SP">São Paulo</option>
<option value="RJ" selected>Rio de Janeiro</option>
</select>
<input type="submit" name="enviar" value="Enviar">
</form>
"""
soup = BeautifulSoup(html, "html.parser")
dados = extract_inputs(soup)
# {
# "usuario": "maria",
# "token": "abc123",
# "genero": "F", # apenas o radio marcado
# "termos": "true", # checkbox marcado
# "observacao": "alguma nota",
# "estado": "RJ", # option selecionada
# } # o input submit é ignorado
Útil para reenviar formulários mantendo os campos ocultos/pré-preenchidos (ex.: tokens CSRF, viewstate) ao automatizar requisições.
anti_captcha
Estratégias para resolver o Cloudflare Turnstile e captchas de imagem, usando o serviço Anti-Captcha. A chave da API pode ser passada por parâmetro (api_key) ou pela variável de ambiente ANTICAPTCHA_KEY.
Todos os parâmetros (XPaths, timeouts, etc.) têm defaults e podem ser sobrescritos.
Com Selenium (pip install "utils-rpa[selenium]"):
from utils_rpa.anti_captcha import cloudflare_solver_selenium
resolvido = cloudflare_solver_selenium(
driver, # WebDriver já na página do desafio
api_key="SUA_CHAVE", # ou via ANTICAPTCHA_KEY
xpath_success='//input[@id="senha"]', # elemento que confirma o sucesso
)
if not resolvido:
... # reiniciar o fluxo
Com Playwright (pip install "utils-rpa[playwright]"):
from utils_rpa.anti_captcha import cloudflare_solver_playwright
resolvido = cloudflare_solver_playwright(
page, # Page do Playwright (sync API)
api_key="SUA_CHAVE",
)
Captcha de imagem (ImageToText) — função assíncrona:
import asyncio
from utils_rpa.anti_captcha import image_to_text
async def main():
texto = await image_to_text(api_key="SUA_CHAVE", base64_image="iVBORw0KGgo...")
print(texto)
asyncio.run(main())
Desenvolvimento
Clone o repositório e instale as dependências (incluindo as de desenvolvimento):
poetry install
Rodar os testes:
poetry run pytest
Rodar o linter:
poetry run ruff check .
Gerar o build do pacote:
poetry build
Licença
Distribuído sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file utils_rpa-0.1.2.tar.gz.
File metadata
- Download URL: utils_rpa-0.1.2.tar.gz
- Upload date:
- Size: 16.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.4.1 CPython/3.12.10 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
adce7d2f86e8cc0736d912d565acf1acb2d923b432dd3eff7c8b5edce215846f
|
|
| MD5 |
0b7cb3069391e1f4871c12062f862002
|
|
| BLAKE2b-256 |
b78ff6a7ea0be159f8369d9171fed1c560c38e29ed4124c0312e6e04cf227ae6
|
File details
Details for the file utils_rpa-0.1.2-py3-none-any.whl.
File metadata
- Download URL: utils_rpa-0.1.2-py3-none-any.whl
- Upload date:
- Size: 16.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.4.1 CPython/3.12.10 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
37b603a4dbf75a7ba32ea70267570f3036a9301a20081178ad5c575e03fd3d15
|
|
| MD5 |
9fee12e36742f19d7dbda1cd0e94d807
|
|
| BLAKE2b-256 |
4cce2c7e277b3b2d044484b0d0e0c23ef5fb0f6d401ba961f4f42e95de74e982
|