Skip to main content

pyvizion

Biblioteca Python para automação de interface por imagem e texto

PyPI v1.0.8 Python MIT

PyPI | Começar | Como funciona


O pyvizion é uma biblioteca Python: localiza um botão ou um texto na tela, clica e digita. Se o passo falhar, o backtrack refaz a ação anterior e tenta de novo.

Serve para aplicativos desktop sem API: ERP, Oracle Forms, Delphi, Citrix. Só Windows. Linux e macOS têm limitação: sem clique virtual, sem foco de janela e sem o mesmo suporte de tela.

Os nomes e a ordem dos parâmetros seguem o bot-vision-suite 1.3.0. Quem já usa esses métodos troca o import; a busca na tela é implementação deste pacote.

from pyvizion import Vizion

vz = Vizion()
vz.click_image("menu.png", backtrack=True)
vz.click_text("Relatórios", backtrack=True)
vz.click_text("Confirmar", sendtext="{enter}")

A versão publicada é a 1.0.8. As versões 0.3.x no PyPI são outra API.


Começar

pip install pyvizion
python -m pyvizion doctor

Tesseract é obrigatório ao criar Vizion(). Sem ele a instância nem sobe (TesseractNotFoundError).

Sistema Instalação
Windows (suportado) UB-Mannheim em C:\Program Files\Tesseract-OCR\
Linux / macOS (limitado) tesseract-ocr / brew install tesseract. Sem clique virtual e sem foco de janela.

Idioma padrão do OCR: eng. Tela em português: Vizion({"tesseract_lang": "por"}) e o pacote por.


Como funciona

Você chama click_image("ok.png") ou click_text("Salvar"). A biblioteca tira um print, procura o alvo e clica no meio dele.

  1. Tira o print: cerca de 5 ms, funciona com dois monitores.
  2. Acha a imagem: você recorta o botão, salva numa pasta (imagens/ok.png) e passa o caminho. A biblioteca procura essa figura na tela. Funciona mesmo se o Windows estiver com a tela aumentada (125% ou 150%).
  3. Acha o texto: Tesseract (inglês por padrão; tesseract_lang="por" se a tela for em português).
  4. Clica e digita: no centro do alvo. use_virtual_mouse no Windows não mexe o cursor.
  5. Se falhar: com backtrack=True, refaz o passo anterior. Também espera aparecer ou sumir.

Se o alvo não estiver na tela, devolve False ou None. Vale if not vz.click_text("OK"). Erro só se faltar Tesseract ou o PNG não existir.

O que melhorou

Os métodos são os mesmos do bot-vision-suite 1.3.0. O que mudou é o jeito de achar o alvo: mais rápido e mais estável com a tela aumentada e com mais de um monitor.

Antes (PyAutoGUI / BVS) pyvizion
Tirar o print Lento (dezenas a centenas de ms) Cerca de 5 ms
Achar imagem Falha fácil se a tela estiver aumentada Acha mesmo com a tela em 125% ou 150%
Achar texto Tela inteira é cara Com region, cerca de 6x mais rápido
Esperar o alvo Cada tentativa paga o print lento wait_until_found dá para usar de verdade
Zoom / 2 monitores Clique no lugar errado Clica no lugar certo nos dois monitores
Alvo sumiu False / None Igual: if not vz.click_text("OK")
Extra (não tinha) janelas, click_any, doctor, mouse virtual

Os "5 ms" e o "6x" vêm do jeito de tirar o print e de ler só a área pedida, não de um teste oficial publicado.


Uso

Backtrack e esperas

vz = Vizion()
vz.click_image("menu.png", backtrack=True)
vz.click_text("Relatórios", backtrack=True)
vz.click_image("salvar.png", wait_until_found=True, wait_timeout=15)
vz.find_image("ampulheta.png", wait_until_disappears=True, wait_timeout=60)
vz.click_image("ok.png", wait_until_disappears=True, wait_timeout=10)

wait_until_disappears no find_* devolve a caixa se o alvo sumiu, None se ainda estiver visível. No click_*, o clique já valeu: devolve True mesmo se o alvo continuar na tela.

Sessão

vz.start_task_session()
vz.click_image("button1.png", backtrack=True)
vz.click_text("Clientes", backtrack=True)
ok, total = vz.end_task_session()

Lista de tarefas

from pyvizion import execute_tasks

execute_tasks([
    {"image": "button.png", "region": (100, 100, 200, 50), "backtrack": True},
    {"text": "Login", "sendtext": "usuario123{tab}senha{enter}"},
    {"type": "relative_image", "anchor_image": "aviso.png", "target_image": "ok.png"},
    {"type": "keyboard_command", "command": "Ctrl+S"},
])

Métodos

Assinaturas posicionais iguais às do bot-vision-suite 1.3.0.

Método Resultado
click_image(...) bool
find_image(...) (x, y, w, h) ou None
click_text(...) bool
find_text(...) caixa ou None
click_relative_image(...) / find_relative_image(...) alvo mais perto da âncora
click_at / click_coordinates clique em ponto
type_text / keyboard_command digitação e atalhos
extract_text_from_region / get_last_extracted_text OCR da área
execute_tasks / execute_with_backtrack_between_tasks listas
start_task_session / end_task_session sessão de backtrack
configure_overlay / get_overlay_config / test_overlay_colors overlay

Extras: wait_for_image, wait_for_text, wait_until_gone, image_exists, text_exists, find_all_images, click_any, find_any, read_text, focus_window, wait_window, window_region, list_windows, press, hotkey, scroll, drag, screenshot, click_image_near_text.

Também como funções: from pyvizion import click_image, find_text, execute_tasks, limpar_texto.

Parâmetros que importam

  • region=(x, y, largura, altura): use sempre que puder. vz.window_region("Título") devolve a janela.
  • specific=False: tenta a região e depois a tela, em várias escalas.
  • mouse_button: "left", "right", "double", "move_to".
  • filter_type: "letters", "numbers", "both". occurrence=2 é a segunda na ordem de leitura.
  • wait_timeout: segundos da espera (padrão da config: 30).

click_* / find_* não levantam se o alvo sumiu. Ambiente quebrado sim: TesseractNotFoundError no Vizion(), ImageFileError se o PNG não existe. As classes ImageNotFoundError e TextNotFoundError existem para quem quiser capturar por nome.


Campos (sendtext)

Texto digitado logo após o clique. {chave} é tecla.

vz.click_text("Usuário", sendtext="admin{tab}senha123{enter}")
Quero sendtext
campo vazio "12345"
substituir o que está lá "{ctrl}a{del}12345"
ir ao próximo "12345{tab}"
confirmar "12345{enter}"
dois campos "01/01/2026{tab}31/01/2026"
pular "{tab*3}"
pausa "12345{tab}{wait 1}"

Macros: {enter} {tab} {esc} {del} {backspace} setas {f1} a {f12} {ctrl}a {ctrl+shift+s} {tab*3} {wait 1.5} {{ }}.

Citrix/RDP que não cola: Vizion({"typing_mode": "type"}).


Tipos de tarefa

tasks = [
    {"type": "focus_window", "title": "Oracle Applications"},
    {"type": "wait_image", "image": "tela.png", "timeout": 30},
    {"text": "Cliente", "sendtext": "12345{enter}", "required": True},
    {"type": "wait_image", "image": "ampulheta.png", "gone": True, "timeout": 60},
    {"image": "popup.png", "optional": True, "sendtext": "{enter}"},
]

Tipos: imagem, texto, relative_image, click, type_text, keyboard_command, wait_image / wait_text, extract_text, wait, focus_window, scroll.

Chaves comuns: mouse_button, delay, sendtext, backtrack, max_attempts, wait_until_found, wait_until_disappears, wait_timeout, optional, required, show_overlay.


Configuração

vz = Vizion({
    "tesseract_lang": "eng",
    "image_folders": ["./imagens"],
    "use_virtual_mouse": False,
    "show_overlay": False,
})
vz.config.set("show_overlay", True)
vz = Vizion("pyvizion.json")
Chave Padrão Uso
confidence_threshold 75.0 limiar OCR (0–100)
default_confidence 0.9 imagem
tesseract_lang eng "por", "por+eng"
tesseract_path / tessdata_path auto executável e tessdata
timeout (wait_timeout) 30 espera padrão
use_virtual_mouse False clique sem mover o cursor (Windows)
typing_mode "paste" "type" no Citrix
image_folders [] onde achar PNG relativo
show_overlay False retângulo de depuração
save_failure_screenshots False print a cada miss
stop_on_failure False para a lista no primeiro erro
failsafe True canto superior esquerdo aborta

Demais chaves (escalas, OCR, overlay, backtrack): veja src/pyvizion/config.py.


Linha de comando

python -m pyvizion doctor
python -m pyvizion screenshot tela.png
python -m pyvizion position
python -m pyvizion pick
python -m pyvizion ocr 100 200 300 40

Prática

  1. Passe region (ou window_region) sempre que souber a área.
  2. Recorte PNG pequeno e único: o ícone, não o formulário.
  3. Prefira wait_until_gone a delay fixo.
  4. Comece com focus_window("Título").
  5. Para parar: mouse no canto superior esquerdo.

Desenvolvimento

pip install -e .[dev]
pytest

O site estático fica em docs/. Para ver localmente:

python -m http.server 8080 --directory docs

Licença

MIT. Texto em LICENSE.

Copyright © 2026 Josias Azevedo da Silva.

Os métodos públicos acompanham o bot-vision-suite (MIT). São pacotes distintos no PyPI.

Metadata

Release files for pyvizion 1.0.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyvizion 1.0.8
File Size Uploaded
pyvizion-1.0.8.tar.gz 244.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyvizion 1.0.8
File Interpreter ABI Platform
pyvizion-1.0.8-py3-none-any.whl Python 3 none any Details

Total release size: 314.6 kB

Release files / pyvizion-1.0.8.tar.gz

Download URL pyvizion-1.0.8.tar.gz
Size 244.6 kB
Tags Source
SHA-256 checksum
How to use checksums
6eefcaa28e66e7b4cdc6afa5c922edf5049daf4ea44a9baa36d89f039e63ed61
BLAKE2b-256 checksum
How to use checksums
c2f1eb188393f7d8099253bb479b903fa568ada1505585d62b8df4d6001ab2db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.0

Release files / pyvizion-1.0.8-py3-none-any.whl

Download URL pyvizion-1.0.8-py3-none-any.whl
Size 70.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d7bf20c87ddf2eaffb61586c22eb474ebeb97130382cff9df72d9ac032fb05a1
BLAKE2b-256 checksum
How to use checksums
4353e0572f413f36d28237d7a6ca689af37b308855252a390a067b05ebfd4041
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.0

Release history Release notifications | RSS feed

This release

1.0.8 This release

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.3.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page