Como resolver o ReCaptcha v2 em Python usando Selenium & CapMonster Cloud
Se você quiser escrever um script para resolver automaticamente diferentes tipos de captchas em Python, primeiro precisará fazer o download da versão mais recente do Python no site oficial.
Próximos passos:
Crie uma pasta em um local conveniente, vá para o VS Code e adicione essa pasta ao nosso novo projeto (Arquivo - Abrir pasta).
Para adicionar a dependência do Selenium, acesse o site https://www.selenium.dev/downloads/, selecione python, copie a linha acima pip install selenium, abra o terminal em nosso projeto (View - Terminal), cole essa linha lá, pressione Enter e aguarde as instalações de dependência.
Agora você precisa adicionar a biblioteca do CapMonster Cloud, você pode encontrar todas as informações sobre ela aqui - https://pypi.org/project/capmonstercloudclient/. Copie a linha pip install capmonstercloudclient e adicione-a ao projeto pelo terminal da mesma forma. Você pode verificar todas as dependências instaladas usando o comando pip list.
Crie um novo arquivo chamado ".env" e insira os seguintes valores nele:
API_KEY="YOUR_API_KEY"
WEBSITE_KEY="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
WEBSITE_URL="https://google.com/recaptcha/api2/demo"
Por exemplo, pegamos o site google.com/recaptcha/api2/demo, ele tem um captcha que vamos resolver usando o CapMonster Cloud, há um identificador de sitekey para ele. API_KEY é sua chave de API do CapMonster Cloud, insira-a na linha apropriada e salve-a no arquivo ".env".
Crie um arquivo "main.py" e importe todos os módulos, dependências e configurações de variáveis de ambiente necessários do arquivo ".env" (dotenvdeve estar instalado em suas dependências):
import asyncio
from selenium import webdriver
from selenium.webdriver.common.by import By
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV2ProxylessRequest
from dotenv import load_dotenv
importar os
load_dotenv()
API_KEY = os.getenv("API_KEY")
WEBSITE_URL = os.getenv("WEBSITE_URL")
WEBSITE_KEY = os.getenv("WEBSITE_KEY")
- Em seguida, escrevemos o código para iniciar o navegador (em nosso exemplo, usamos o webdriver.Chrome, você pode ter um driver diferente, não se esqueça disso!), criar uma tarefa para resolver o captcha e inserir o resultado no site de destino:
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
async def solve_captcha():
# Criando um tipo de solicitação de solução reCAPTCHA V2 Proxyless
recaptcha_request = RecaptchaV2ProxylessRequest(websiteUrl=WEBSITE_URL, websiteKey=WEBSITE_KEY)
result = await cap_monster_client.solve_captcha(recaptcha_request)
return result['gRecaptchaResponse']
async def main():
try:
# Executando o navegador Chrome com o Selenium
navegador = webdriver.Chrome()
# Abrindo um site
browser.get(WEBSITE_URL)
Imprimir('Página aberta, aguardando o carregamento do reCAPTCHA...')
# Aguarde um pouco para que o CAPTCHA seja carregado (você pode configurar a duração)
aguarde asyncio.sleep(5)
Solução reCAPTCHA usando o CapMonster
responses = await solve_captcha()
print('Resposta do CapMonster:', responses)
# Inserção de um reCAPTCHA resolvido em uma página
browser.execute_script(f'document.getElementById("g-recaptcha-response").innerHTML = "{responses}";')
Imprimir('O resultado foi inserido na página!')
# Executar ações adicionais, se necessário (por exemplo, enviar um formulário)
browser.find_element(By.ID, 'recaptcha-demo-submit').click()
Imprimir('Formulário enviado!')
# Aguarde um pouco para observar as alterações
aguarde asyncio.sleep(10)
exceto Exception as e:
print('Error:', e)
finally:
# Fechando o navegador
browser.quit()
# Execução de um loop de eventos assíncrono
asyncio.run(main())
Código completo:
import asyncio
from selenium import webdriver
from selenium.webdriver.common.by import By
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV2ProxylessRequest
from dotenv import load_dotenv
importar os
# Carregando variáveis de ambiente de um arquivo .env
load_dotenv()
API_KEY = os.getenv("API_KEY")
WEBSITE_URL = os.getenv("WEBSITE_URL")
WEBSITE_KEY = os.getenv("WEBSITE_KEY")
# Configuração do cliente CapMonster
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
async def solve_captcha():
# Criando um tipo de solicitação de solução reCAPTCHA V2 Proxyless
recaptcha_request = RecaptchaV2ProxylessRequest(websiteUrl=WEBSITE_URL, websiteKey=WEBSITE_KEY)
result = await cap_monster_client.solve_captcha(recaptcha_request)
return result['gRecaptchaResponse']
async def main():
try:
# Executando o navegador Chrome com o Selenium
navegador = webdriver.Chrome()
# Abrindo um site
browser.get(WEBSITE_URL)
Imprimir('Página aberta, aguardando o carregamento do reCAPTCHA...')
# Aguarde um pouco para que o CAPTCHA seja carregado (você pode configurar a duração)
aguarde asyncio.sleep(5)
Solução reCAPTCHA usando o CapMonster
responses = await solve_captcha()
print('Resposta do CapMonster:', responses)
# Inserção de um reCAPTCHA resolvido em uma página
browser.execute_script(f'document.getElementById("g-recaptcha-response").innerHTML = "{responses}";')
Imprimir('O resultado foi inserido na página!')
# Realização de ações adicionais, se necessário (por exemplo, envio de um formulário)
browser.find_element(By.ID, 'recaptcha-demo-submit').click()
Imprimir('Formulário enviado!')
# Aguarde um pouco para observar as alterações
aguarde asyncio.sleep(10)
exceto Exception as e:
print('Error:', e)
finally:
# Fechando o navegador
browser.quit()
# Execução de um loop de eventos assíncrono
asyncio.run(main())
Explicação do código:
load_dotenv() é usado para carregar variáveis de ambiente do arquivo .env.
os.getenv("API_KEY"), os.getenv("WEBSITE_URL"), e os.getenv("WEBSITE_KEY") são usados para obter os valores das variáveis de ambiente correspondentes do arquivo .env.
ClientOptions(api_key=API_KEY) cria um objeto ClientOptions com a chave de API fornecida para o CapMonster.
CapMonsterClient(options=client_options) cria um cliente CapMonster com as opções fornecidas.
async def solve_captcha(): essa função cria uma solicitação de solução CAPTCHA do tipo reCAPTCHA V2 Proxyless usando o CapMonster.
Retorna um valor gRecaptchaResponse que representa a solução CAPTCHA.
async def main(): função assíncrona principal que executa o script principal.
Inicia o navegador Chrome usando o Selenium, abre o site e aguarda o carregamento do reCAPTCHA.
Chamada solve_captcha() para resolver um CAPTCHA usando o CapMonster.
Insere um CAPTCHA resolvido em uma página, executa ações adicionais (como o envio de um formulário) e aguarda as alterações.
Captura e exibe um erro se algo der errado.
Fecha o navegador depois de concluir todas as ações.
asyncio.run(main()) executa a função assíncrona main() usando asyncio.run(), que permite que você execute código assíncrono no estilo de script.
Vamos executar nosso script. Se aparecer algum erro, use Run e Debug. Se tudo estiver correto, você deverá obter o seguinte resultado:
Note: Gostaríamos de lembrá-lo de que o produto é usado para automatizar testes em seus próprios sites e em sites aos quais você tem acesso legal.