Ir para o conteúdo

Visão Computacional

Usando os métodos abaixo, você poderá usar a visão computacional para interagir com os elementos que aparecem na tela.

Adicionar imagem

Por padrão, as imagens dos elementos são obtidas da pasta resources do projeto e adicionadas ao mapa de imagens. No entanto, é possível adicionar uma imagem que está em outro diretório no mapa da imagens e, assim, acessá-la normalmente através do label definido.

Observação

Esta operação não é necessária para imagens que já estão na pasta resources padrão do projeto.

# Adicionando uma imagem que está em um diretório específico ao mapa de imagens.
bot.add_image("elemento", "/meu_diretorio/imagens/elemento.png")
// Adicionando uma imagem que está em um diretório específico ao mapa de imagens.
addImage("elemento", "/meu_diretorio/imagens/elemento.png")

Obter imagem do mapa

Você pode obter uma imagem específica do mapa de imagens usando um label definido.

# Obtendo a imagem que tem o rótulo "elemento".
img = bot.get_image_from_map("elemento")
// Ainda não implementado.

Encontrando elementos

Usando os métodos de 'find', é possível procurar um elemento na tela usando a visão computacional até que ocorra um tempo limite. Você pode usar o retorno do método de busca para verificar se um elemento foi encontrado ou não e com base nisso realizar o tratamento necessário.

# Imprima se o primeiro_elemento NÃO foi encontrado na tela.
if not bot.find(label="primeiro_elemento", matching=0.97, waiting_time=10000):
    print("Este elemento não foi encontrado.")

# Imprima se o segundo_elemento foi encontrado na tela.
if bot.find(label="segundo_elemento", matching=0.97, waiting_time=10000):
    print("Este elemento foi encontrado.")

# Usar find_until terá o mesmo efeito que o uso do find.
if bot.find_until(label="outro_elemento", matching=0.97, waiting_time=10000):
    print("Encontrado!")
// Imprima se o primeiroElemento NÃO foi encontrado na tela.
if(!find("primeiroElemento", 0.97, 10000)) {
    System.out.println("Este elemento não foi encontrado");
}

// Imprima se o segundoElemento foi encontrado na tela.
if(find("segundoElemento", 0.97, 10000)) {
    System.out.println("Este elemento foi encontrado");
}

O método find acima é o mais comum de usar e basicamente funcionará para todos os casos em que precisamos procurar um elemento na tela. No entanto, é possível usar métodos de busca para situações específicas.

Encontrar elemento de texto

# Procurando por um elemento que contém apenas texto.
if bot.find_text(label="txt_elemento", matching=0.97, waiting_time=10000):
    print("Este texto foi encontrado na tela!")
// Procurando por um elemento que contém apenas texto.
if(findText("txt_elemento", 0.97, 10000)){
    System.out.println("Este texto foi encontrado na tela!");
}

Encontrar todos os elementos

Além de realizar operações com elementos únicos, também é possível procurar por vários elementos diferentes ou todas as ocorrências de um mesmo elemento.

# Procure todas as ocorrências do elemento.
elementos = bot.find_all(label="teste_elemento", matching=0.97, waiting_time=10000)

# Para cada elemento encontrado, imprima as coordenadas.
for ele in elementos:
    print(ele)
// Procure todas as ocorrências do elemento.
List<State> elementos = findAll("testeElemento", 0.97, 20000);

// Para cada elemento encontrado, imprima as coordenadas.
for(State ele : elementos) {
    System.out.println(ele.getX());
    System.out.println(ele.getY());
    System.out.println(ele.getWidth());
    System.out.println(ele.getHeight());
}

Encontrar múltiplos elementos

# Lista com o label dos elementos.
elementos_para_encontrar = ["ele1", "ele2", "ele3", "ele4"]

# Ao procurar todos os elementos será retornado um dicionário com o label e as coordenadas de cada um.
elementos = bot.find_multiple(labels=elementos_para_encontrar, matching=0.97, waiting_time=20000)

print(elementos)
// Lista com os labels dos elementos.
List<String> ElementosParaEncontrar = new ArrayList<String>();
ElementosParaEncontrar.add("ele1");
ElementosParaEncontrar.add("ele2");
ElementosParaEncontrar.add("ele3");
ElementosParaEncontrar.add("ele4");

// Procurar todos os elementos retornará um mapa com os labels e coordenadas de cada um.
Map<String, State> elementos = findMultiple(ElementosParaEncontrar, 0.97, 10000);

// Imprimindo as coordenadas do elemento "ele2".
System.out.println(elementos.get("ele2"));

Definir elemento atual

Você pode definir o elemento atual para executar operações nele. Isso pode ser útil quando procuramos vários elementos, mas queremos trabalhar com um específico.

# Procure todas as ocorrências de um elemento.
elementos = bot.find_all(label="button", matching=0.97, waiting_time=10000, as_list=True)

# Definindo a segunda ocorrência como o elemento atual.
bot.set_current_element(elementos[1])

# Clicando no elemento definido.
bot.click()
// Procure todas as ocorrências de um elemento.
List<State> elementos = findAll("button", 0.97, 10000);

// Definindo a segunda ocorrência como o elemento atual.
setCurrentElement(elementos.get(1));

// Clicando no elemento definido.
click();

Obtendo elementos

Você pode obter informações sobre o último elemento encontrado e também as coordenadas de um elemento específico.

Obtenha o último elemento

# Obtenha o último elemento encontrado na tela.
ultimo_elemento = bot.get_last_element()

# Imprimindo as coordenadas do elemento.
print(ultimo_elemento)
// Obtenha o último elemento encontrado na tela.
State ultimoElemento = getLastElement();

// Imprimindo as coordenadas do elemento.
System.out.println(ultimoElemento.getX());
System.out.println(ultimoElemento.getY());
System.out.println(ultimoElemento.getWidth());
System.out.println(ultimoElemento.getHeight());

Obter coordenadas do elemento

# Este método procurará o elemento e retornará suas coordenadas X e Y.
ele = bot.get_element_coords(label="teste_elemento", matching=0.97)
print(ele)

# Este método procurará o elemento e retornará suas coordenadas X e Y centralizadas.
coord_elemento = bot.get_element_coords_centered(label="teste_elemento", matching=0.97)
print(coord_elemento)
// Este método procurará o elemento e retornará suas coordenadas X e Y.
Point ele = getElementCoords("test_element", 0.97);
System.out.println(ele);

// Este método procurará o elemento e retornará suas coordenadas X e Y centralizadas.
Point elementoCentrado = getElementCoordsCentered("test_element", 0.97);
System.out.println(elementoCentrado);