O que é desenhe e adivinhe e por que as pessoas estão falando sobre isso
Muita gente pergunta sobre desenhe e adivinhe nos fóruns de automação e QA. A resposta curta: é uma abordagem para resolver desafios visuais onde o sistema pede para você completar um padrão, conectar pontos ou identificar elementos semelhantes numa imagem. Não é mágica, é basicamente uma estratégia manual ou semi-automatizada aplicada a esse tipo de verificação. Eu já briguei com isso faz tempo, quando precisava rodar testes de regressão em sistemas que tinham esse tipo de validação no formulário de login. A coisa mais frustrante era que cada vez parecia diferente — cores trocadas, número variável de elementos, fundo gerado aleatoriamente. Um script simples de correspondência de imagem quebrava em 90% das tentativas.
Como funciona desenhe e adivinhe na prática
O conceito básico é: o sistema mostra uma imagem com um conjunto de opções ou uma grade, e você precisa identificar a resposta correta com base no que foi pedido. Pode ser selecionar todos os quadrados com semáforos, conectar letras na ordem alfabética, ou reproduzir um desenho parcial. Cada plataforma tem seu próprio twist. O que muita gente não percebe na primeira vez é que a variável mais importante não é a tecnologia que você usa para detectar os elementos. É o tempo de resposta. Se sua solução leva mais de 8 segundos, o teste falha por timeout antes mesmo de validar o resultado. Eu perdi duas semanas ajustando pipelines de visão computacional até entender que o gargalo real era a latência da própria chamada de rede, não o processamento da imagem.
A ferramenta em si funciona em três etapas principais. Primeiro, capturar o frame atual da tela ou do elemento canvas no DOM. Segundo, processar essa imagem com algum algoritmo de detecção — seja OCR, template matching, ou integração com uma API de IA. Terceiro, enviar a resposta corretamente formatada de volta para o campo oculto ou para o evento que a página espera. Eis um exemplo concreto. Digamos que o desafio peça para clicar nos objetos que contêm um animal. Você tira um screenshot do elemento, passa por um classificador treinado para reconhecer animais, obtém as coordenadas de cada bounding box e dispara os clicks sequenciais. Parece simples no papel. Na prática, o maior problema que eu encontrei foi quando o fundo da imagem mudava de tom a cada tentativa, quebrando qualquer lógica baseada em cores fixas. Minha solução foi trocar a abordagem de detecção por cores para usar apenas contornos e formas, usando Canny edge detection seguido de Hough transform. Isso resolveu o problema de variações de fundo, mas introduziu outro: falsos positivos em imagens texturizadas. Aí eu tive que adicionar um filtro de área mínima nos contornos detectados, descartando fragmentos menores que 50 pixels.
Se você quiser testar algo assim, existem algumas opções no mercado. A mais acessível para quem está começando é uma extensão de navegador que automatiza a detecção e o clique. O link direto varia conforme a versão, mas normalmente está disponível na Chrome Web Store com a busca por "capcha solver image". Há também bibliotecas open source no GitHub que você pode rodar localmente, como projetos baseados em Python com Selenium ou Puppeteer.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Pontos cegos que ninguém conta
Aqui vão coisas que eu aprendi na marra e que raramente aparecem em tutoriais: O primeiro erro comum é confiar cegamente em APIs de reconhecimento de imagem prontas. Elas funcionam bem em condições ideais, mas falham feio quando a resolução do elemento no DOM é menor que 150x150 pixels. Muitos desafios visuais são renderizados em tamanhos pequenos propositalmente. Nesses casos, upscale com interferência controlada (não bilineal simples) resolve temporariamente, mas consome CPU extra. Eu uso bicubic com ganho de contraste antes de enviar pra API, e consigo manter a taxa de acerto acima de 85% nessa situação.
O segundo erro é subestimar a necessidade de tratamento de estado. Após resolver um desafio visual, o site frequentemente dispara um evento de validação que, se não for simulado corretamente, deixa o formulário num estado inconsistente. Campos que pareciam preenchidos estão vazios nos dados enviados. A correção é disparar manualmente o evento change ou input no elemento alvo após a interação, além de verificar se o atributo validity do formulário foi atualizado. A terceira limitação séria é que desenhe e adivinhe não escala bem para volume alto. Se você precisa processar mais de 200 desafios por hora, a abordagem manual ou semi-automatizada começa a ficar inviável. O custo computacional das inferências somado à latência de rede torna o tempo total proibitivo. Nesses cenários, o ideal é negociar com a equipe de produto para uma flag de contorno ou um modo de teste que desative esse tipo de verificação em ambientes de staging.
Também é importante saber quando desistir. Tem situação em que o desafio é dinâmico o suficiente — elementos que se movem, animações que mascaram a resposta, ou tempos de expiração de 3 segundos — que nenhum script razoável consegue vencer consistentemente. Nesses casos, a única saída real é automação humana, seja com workers manuais revisando os frames, ou com a equipe responsável pelo sistema substituindo esse mecanismo por algo mais programável. Tenho um projeto hoje que switchedou de validação visual para um token-based challenge interno depois de gastar três sprints inteiros tentando burlar o primeiro. O resultado foi muito mais limpo.
Resumo rápido do que vale a pena
Se você está considerando usar desenhe e adivinhe em um fluxo de trabalho, comece pequeno. Teste com 10 instâncias antes de automação em larga escala. Monitore a taxa de sucesso por ambiente — produção costuma ter variações maiores que staging. E documente os casos de falha recorrentes, porque eles geralmente apontam para brechas no design do próprio desafio que podem ser corrigidas de dentro, não de fora. A ferramenta certa depende do seu caso. Para uso ocasional, extensões de navegador resolvem. Para integração em pipelines de CI, bibliotecas com Selenium ou Playwright são mais adequadas. Para produção real, converse com quem desenvolveu o sistema antes de gastar tempo construindo uma solução que vai ser substituída na próxima atualização.