Solução de Problemas

Erros e solução de problemas do BLS CAPTCHA

A solução BLS CAPTCHA apresenta desafios únicos porque usa uma implementação customizada. Aqui estão os erros mais comuns e suas soluções.


Erros de envio da API

ERROR_BAD_PARAMETERS

Causa: Parâmetros obrigatórios ausentes — instruções ou imagens.

Correção:

# WRONG — missing instructions
response = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY, "method": "bls",
    "image_base64_1": img1, "json": 1
})

# CORRECT — include instructions
response = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY, "method": "bls",
    "instructions": "Select all images with a car",
    "image_base64_1": img1, "json": 1
})

ERROR_WRONG_FILE_EXTENSION

Causa: Os dados da imagem não são base64 válidos ou são um formato não suportado.

Correção:

  • Certifique-se de que as imagens sejam PNG ou JPEG codificadas em base64
  • Remova o prefixo data:image/...;base64,
  • Verifique se a string base64 não está truncada
import base64

# Strip the data URI prefix
src = img_element.get_attribute("src")
if src.startswith("data:image"):
    b64 = src.split(",")[1]
else:
    # Download and encode
    img_data = requests.get(src).content
    b64 = base64.b64encode(img_data).decode()

ERROR_CAPTCHA_UNSOLVABLE

Causa: As imagens têm qualidade muito baixa, estão desfocadas ou as instruções são ambíguas.

Correção:

  • Capture imagens em resolução total
  • Certifique-se de que o texto da instrução seja extraído corretamente
  • Tente novamente – alguns desafios são inerentemente mais difíceis

Erros de extração de imagem

As imagens são carregadas dinamicamente

Problema: As imagens não estão no DOM quando a página é carregada pela primeira vez.

Correção: Aguarde a renderização completa do captcha:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Wait for captcha images to load
WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".captcha-image img"))
)

As imagens são telas, não elementos img

Problema: Algumas implementações de BLS renderizam imagens em elementos <canvas>.

Correção: Extraia dados do canvas como base64:

canvas_elements = driver.find_elements(By.CSS_SELECTOR, ".captcha-canvas")
for i, canvas in enumerate(canvas_elements, 1):
    b64 = driver.execute_script(
        "return arguments[0].toDataURL('image/png').split(',')[1];",
        canvas
    )
    payload[f"image_base64_{i}"] = b64

Imagens por trás do anti-hotlinking

Problema: URLs de imagem retornam 403 quando buscados fora do navegador.

Correção: Extraia imagens dentro do contexto do navegador:

# Get image data from within the browser
b64 = driver.execute_script("""
    var img = arguments[0];
    var canvas = document.createElement('canvas');
    canvas.width = img.naturalWidth;
    canvas.height = img.naturalHeight;
    canvas.getContext('2d').drawImage(img, 0, 0);
    return canvas.toDataURL('image/png').split(',')[1];
""", img_element)

Erros de aplicação de solução

Imagens erradas selecionadas

Causa: Incompatibilidade na ordem das imagens entre a extração e a exibição.

Correção: Mantenha uma ordem consistente:

# Ensure images are indexed in display order
captcha_imgs = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")
# The order of find_elements matches DOM order = display order
for i, img in enumerate(captcha_imgs, 1):
    payload[f"image_base64_{i}"] = extract_base64(img)

Os índices da solução não correspondem

Causa: CaptchaAI retorna índices baseados em 1, mas seu código usa índices baseados em 0.

Correção:

solution = result["request"]  # e.g., "1,3,5"
indices = [int(i) for i in solution.split(",")]

# Convert to 0-based for array access
for idx in indices:
    captcha_imgs[idx - 1].click()  # 1-based → 0-based

O envio do formulário falha após a seleção correta

Causa: Campos ou tokens adicionais do formulário estão faltando.

Correção: Verifique se há campos ocultos que devem ser enviados junto com o captcha:

# Look for hidden captcha tokens
hidden_fields = driver.find_elements(By.CSS_SELECTOR, "input[type='hidden']")
for field in hidden_fields:
    name = field.get_attribute("name")
    value = field.get_attribute("value")
    print(f"Hidden field: {name}={value}")

Erros de tempo limite

O Captcha expira antes da conclusão da resolução

Problema: BLS CAPTCHA tem uma janela de validade curta.

Correção:

  • Extraia imagens e envie para CaptchaAI imediatamente
  • Não extraia imagens e espere antes de enviar
  • Se a resolução demorar mais de 60 segundos, o captcha pode ter expirado – atualize e tente novamente

A votação demora muito

Correção: Certifique-se de estar pesquisando corretamente:

# Standard polling pattern
for _ in range(30):  # 30 attempts × 5 seconds = 150 seconds max
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY, "action": "get", "id": task_id, "json": 1
    }).json()

    if result.get("status") == 1:
        return result["request"]
    if result.get("request") == "ERROR_CAPTCHA_UNSOLVABLE":
        # Don't keep polling — start over
        raise Exception("Unsolvable")

Lista de verificação de depuração

Verifique Ação
Instruções extraídas? Imprima e verifique o texto das instruções
Imagens válidas? Salve base64 em arquivo e abra para verificar
Contagem de imagens correta? Compare o número de imagens enviadas versus exibidas
Ordem das imagens correta? Verifique se a ordem do DOM corresponde à ordem de exibição
Prefixo Base64 removido? Remover data:image/...;base64,
Formato da solução? Analisar índices baseados em 1 separados por vírgula
Conversão de índice? Subtraia 1 para acesso ao array baseado em 0

Perguntas frequentes

Quantas imagens devo enviar para CaptchaAI?

Envie todas as imagens exibidas no CAPTCHA, normalmente 3–9. Use image_base64_1 até image_base64_9.

E se a instrução estiver em um idioma diferente do inglês?

Envie as instruções exatamente como exibidas. CaptchaAI lida com instruções multilíngues.

Posso pré-carregar imagens para acelerar a resolução?

Não. O BLS gera imagens únicas por sessão. Você deve extraí-los novos para cada instância de captcha.

E se o BLS mudar seu formato CAPTCHA?

Se o formato mudar, o código de extração de imagem poderá precisar de atualização. Os parâmetros da API CaptchaAI (method=bls, instruções, imagens) permanecerão os mesmos.


Guias relacionados

Os comentários estão desativados para este artigo.