Ações Anticaptcha
A integração com o serviço Anti-Captcha permite que o Marvin resolva diferentes tipos de captchas automaticamente.
Para usar estas ações é necessário ter uma conta no Anti-Captcha e uma chave de API válida (anticaptcha_key
).
Observação importante: a solução de ReCaptcha/hCaptcha normalmente expira rapidamente (tipicamente ~2 minutos). Sempre resolva o captcha como a última ação antes de submeter o formulário ou validar a página.
Importante sobre retornos (variáveis de estado)
- As ações expõem seus valores retornados como variáveis de estado que podem ser lidas pelo integrador.
- Para acessar um valor retornado, atribua uma variável local à variável de estado usando o prefixo $
. O nome deve ser exatamente igual à chave retornada pela ação.
Exemplo genérico:
# chama a action
anticaptcha.recaptcha_v2(browser, "MINHA_CHAVE")
# recupera o token retornado pela action
g_recaptcha_response = $g_recaptcha_response
Ações
As ações abaixo estão disponíveis no Marvin:
anticaptcha.recaptcha_v2
Resolve ReCaptcha v2 presente na página atual.
Parâmetros:
- browser
— objeto do navegador (página) onde o ReCaptcha está presente.
- anticaptcha_key
— chave da conta Anti-Captcha (string).
- callback_function
(opcional) — nome da função JavaScript de callback usada pela página para validar o ReCaptcha. Se a validação da página é feita via POST, este parâmetro não é necessário.
Retorno (variáveis de estado):
- g_recaptcha_response
— token de solução (string).
Como usar (exemplo):
# chama a action
anticaptcha.recaptcha_v2(browser, "MINHA_CHAVE")
# lê a variável de estado gerada pela action
g_recaptcha_response = $g_recaptcha_response
Exceções:
- CaptchaNotFound
— lançado quando não é possível localizar o ReCaptcha v2 na página, quando há mais de um ReCaptcha detectado, ou se ocorrer erro durante a execução do callback.
Notas: - A chave do site (sitekey) é automaticamente extraída do iframe do ReCaptcha quando possível.
anticaptcha.hcaptcha
Resolve hCaptcha presente na página atual.
Parâmetros:
- browser
— objeto do navegador (página) onde o hCaptcha está presente.
- anticaptcha_key
— chave da conta Anti-Captcha (string).
- callback_function
(opcional) — nome da função JavaScript de callback usada pela página.
- hcaptcha_key
(opcional) — sitekey do hCaptcha; se informado, será usado em vez de tentar descobrir automaticamente pela página.
Retorno (variáveis de estado):
- h_recaptcha_response
— token de solução (string).
Como usar (exemplo):
# usar sitekey detectada automaticamente
anticaptcha.hcaptcha(browser, "MINHA_CHAVE")
# ler token retornado
h_recaptcha_response = $h_recaptcha_response
# --- usando hcaptcha_key explicitamente ---
anticaptcha.hcaptcha(browser, "MINHA_CHAVE", hcaptcha_key="SITEKEY_DA_PAGINA")
Exceções:
- CaptchaNotFound
— lançado quando não é possível localizar o hCaptcha na página ou se ocorrer erro durante a execução do callback.
anticaptcha.image_captcha
Resolve um captcha do tipo imagem a partir de um arquivo local.
Parâmetros:
- anticaptcha_key
— chave da conta Anti-Captcha (string).
- img_file
— caminho para o arquivo de imagem contendo o captcha.
Retorno (variáveis de estado):
- captcha
— texto solucionado (string).
Como usar (exemplo):
# resolver imagem local
anticaptcha.image_captcha("MINHA_CHAVE", "C:/temp/captcha.png")
# ler resultado
captcha = $captcha
Exceções:
- CaptchaNotFound
— lançado quando a solução não pôde ser obtida pelo serviço.
Como obter a função de retorno de chamada (callback)
A função de callback do ReCaptcha pode ser identificada de duas maneiras principais:
- Elemento HTML com a classe
g-recaptcha
e atributodata-callback
. Exemplo:
<input type="submit" class="g-recaptcha" data-callback="loginFn" onclick="validateForm" value="OK" data-sitekey="XXXXXXXXXXXXXXXXXXXXXXXX">
- Definição via JavaScript usando
grecaptcha.render
, onde o parâmetrocallback
aponta para a função. Exemplo:
grecaptcha.render("recaptcha", {
"sitekey": "XXXXXXXXXXXXXXXXXXXXXXXX",
"callback": verifyCallbackCaptcha,
"size": "invisible"
})
Se a página utiliza o método POST para validar o ReCaptcha (ou hCaptcha), geralmente não é necessário informar a callback_function
.