Use um resolvedor de CAPTCHA com Selenium
Use o solvethree para obter um token de reCAPTCHA Enterprise e depois use o Selenium para inserir solution.token no formulário da sua aplicação e enviá-lo. O SDK resolve a tarefa; ele não preenche o formulário do navegador para você.
O exemplo usa um formulário HTTPS com um campo de token e um botão de envio. Adapte esses seletores à aplicação que você está testando.
Nesta página
Prepare o formulário e o ambiente Python
- 1.
Instale as dependências
Use Python 3.10 ou mais recente com Chrome. Instale o pacote
seleniumpelo pip e depois instale o SDK Python oficial do solvethree a partir do arquivo wheel disponível para download. Use as instruções de instalação por download direto na integração com Python; não as substitua por uma instalação presumida a partir de um registro de pacotes. - 2.
Configure o perfil de destino
Configure o hostname do formulário sob seu controle no console do solvethree e verifique se o perfil está ativo para seu espaço de trabalho. Enviar um hostname em uma tarefa não cria esse perfil. O exemplo solicita a ação
login; altere-a se sua aplicação usar outra ação. - 3.
Defina as variáveis de ambiente
Defina
TARGET_URLcomo a URL HTTPS completa do seu formulário,SOLVETHREE_PROXYcomo a URL do seu proxy HTTP ou HTTPS eSOLVETHREE_API_KEYcomo a chave de API do seu espaço de trabalho. Mantenha a chave no processo Python, não no JavaScript da página.
Resolva primeiro e depois inicie o Chrome com a identidade retornada
Este exemplo com Chrome exige um proxy com autorização por lista de IPs permitidos, sem nome de usuário ou senha. Ele rejeita URLs de proxy que contenham credenciais e não implementa a configuração de proxy autenticado.
A tarefa usa o hostname extraído de TARGET_URL, a ação login e um proxy. Depois que solve retorna um resultado pronto, o Chrome é iniciado com esse mesmo proxy e o userAgent retornado. Antes da navegação, o exemplo também define o cabeçalho secChUa retornado.
# Install selenium and the official solvethree Python SDK first.
import os
from urllib.parse import urlsplit
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from solvethree import Solvethree
target = os.environ["TARGET_URL"] # Your configured HTTPS form page.
proxy_url = os.environ["SOLVETHREE_PROXY"]
proxy = urlsplit(proxy_url)
if proxy.username or proxy.password:
raise ValueError("This Chrome example requires an IP-allowlisted proxy without URL credentials")
client = Solvethree(os.environ["SOLVETHREE_API_KEY"])
result = client.solve({"site": urlsplit(target).hostname, "action": "login", "proxy": proxy_url})
solution = result["solution"]
options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=" + proxy_url)
options.add_argument("--user-agent=" + solution["userAgent"])
driver = webdriver.Chrome(options=options)
try:
driver.execute_cdp_cmd("Network.enable", {})
driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {
"headers": {"sec-ch-ua": solution["secChUa"]}
})
driver.get(target)
# Adapt the field and button to your application's form contract.
field = WebDriverWait(driver, 20).until(
lambda browser: browser.find_element(By.NAME, "g-recaptcha-response")
)
driver.execute_script("""
arguments[0].value = arguments[1];
arguments[0].dispatchEvent(new Event('input', {bubbles:true}));
""", field, solution["token"])
driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]').click()
# Check your application's success response here.
finally:
driver.quit()Solvethree.solve cria a tarefa uma única vez e consulta seu status até que esteja pronta ou lance uma exceção. Só então o navegador navega até o formulário. O script aguarda o campo de token, atribui solution.token, dispara um evento de entrada e clica no botão de envio. O Chrome é fechado no bloco finally.
Adapte as premissas do formulário da demonstração
TARGET_URLé a página do formulário da sua aplicação. Ositeda tarefa é seu hostname, não a URL completa; requisições de reCAPTCHA não usam um campourloutype.loginé a ação do exemplo. Substitua-a pela ação usada pela aplicação e pelo perfil configurado para ela.By.NAMEcomg-recaptcha-responselocaliza a textarea da demonstração. Use o campo ou parâmetro de envio que sua aplicação realmente lê. Atribuir o valor e disparar um evento de entrada é a transferência da demonstração, não um callback universal de reCAPTCHA.button[type="submit"]identifica o botão de envio da demonstração. Substitua-o por um seletor inequívoco para seu formulário e mantenha o comportamento de sessão, CSRF e callback exigido pela aplicação.
A espera explícita de 20 segundos do exemplo verifica apenas se a textarea existe. Após clicar em Submit, adicione uma espera condicional pelo resultado real da sua aplicação, como o estado de sucesso ou um erro de validação. Use um prazo total para o fluxo do navegador separado do tempo limite do solucionador; não substitua verificações de estado por pausas fixas nem misture esperas implícitas e explícitas sem critério.
Verifique a etapa com falha antes de pagar por outra resolução
- A tarefa de resolução falha antes de o Chrome ser iniciado.
Inspecione errorCode e error da tarefa em estado terminal. Diferencie uma tarefa com falha de um erro de requisição HTTP.
Experimente: Corrija o problema de entrada, perfil ou conectividade informado antes de tentar novamente. Pare de consultar uma tarefa com falha; entradas inválidas que não foram alteradas não melhorarão com outra requisição.
- O Selenium excede o tempo limite ao procurar a textarea.
Confirme que o Chrome chegou ao formulário pretendido e que a página realmente contém o campo com o nome usado na demonstração.
Experimente: Substitua o localizador da demonstração pelo mecanismo de transferência de token da sua aplicação e aguarde o estado que o torna disponível. Um tempo limite maior não corrigirá um seletor errado.
- O token está pronto, mas a aplicação rejeita o envio.
Primeiro, inspecione a requisição de saída da aplicação. Verifique se ela contém solution.token — não o ID da tarefa nem um valor antigo — e se a ação, o proxy, a identidade do navegador e a sessão correspondem ao fluxo pretendido.
Experimente: Corrija o parâmetro enviado ou os requisitos da aplicação antes de solicitar outro token. Uma tarefa pronta fornece uma solução; a resposta da aplicação determina se o envio foi aceito.
Fontes e referência da API
Execute sua primeira tarefa.
Comece com $5 em créditos no espaço de trabalho.