Fazer bypass a captcha em Python
Integre o pacote Python para resolver o captcha automaticamente em qualquer site.
Pacote Python para fácil integração com a API do serviço de solução de captcha 2Captcha para fazer bypass a reCAPTCHA, Arkose captcha, geetest e resolver quaisquer outros captchas
Publicados no GitHub estão exemplos de contorno de captcha utilizando Python e Selenium. O repositório contém scripts prontos a usar para automatizar processos de resolução de captcha, proporcionando uma fácil integração em projectos existentes.
Início rápidoInstalação
O pacote de scripts pode ser instalado usando o instalador de pacotes ou manualmente
Pip
Para instalar automaticamente um pacote de biblioteca, deve usar a solução de pacote padrão do Python - Pip. Descarregue o link e instale de acordo com as instruções. Depois de instalar a app, use o comando:
pip3 install 2captcha-python
Convidamo-lo a explorar o nosso repositório GitHub onde pode encontrar bibliotecas e módulos para fácil integração com a nossa API.
Configuração
Descrição de todos os parâmetros necessários para configurar o pacote instalado
Uma instância da classe TwoCaptcha
pode ser criada desta forma:
from twocaptcha import TwoCaptcha
solver = TwoCaptcha('YOUR_API_KEY')
Também pode personalizar algumas das opções para a instância criada:
config = {
'server': '2captcha.com',
'apiKey': 'YOUR_API_KEY',
'softId': 123,
'callback': 'https://your.site/result-receiver',
'defaultTimeout': 120,
'recaptchaTimeout': 600,
'pollingInterval': 10,
}
solver = TwoCaptcha(**config)
Opções de instância TwoCaptcha
Opção | Valor padrão | Descrição |
---|---|---|
servidor | '2captcha.com' | Servidor de APIs. Pode configurá-lo para 'rucaptcha.com' se a sua conta estiver lá registada |
softId | - | o seu ID de software obtido após a publicação no 2Captcha catálogo de software |
callback | - | URL do seu servidor web que recebe o resultado do reconhecimento captcha. O URL deve ser registado primeiro nas configurações de pingback da sua conta |
defaultTimeout | 120 | Tempo limite de pesquisa em segundos para todos os tipos de captcha, exceto reCAPTCHA. Define por quanto tempo o módulo tenta obter a resposta da parte da API res.php |
recaptchaTimeout | 600 | Tempo limite de sondagem para reCAPTCHA em segundos. Define por quanto tempo o módulo tenta obter a resposta da parte da API res.php |
pollingInterval | 10 | Intervalo em segundos entre solicitações da parte da API res.php , não é recomendado definir valores inferiores a 5 segundos |
IMPORTANTE: assim que ocallback
seja definido para a instânciaTwoCaptcha
, todos os métodos retornam apenas o ID do captcha e NÃO pesquisam a API para obter o resultado. O resultado será enviado para o URL de retorno de chamada. Para obter a resposta manualmente, use o método getResult
Resolver o captcha
Quando envia qualquer captcha baseado em imagem, o uso de captcha pode fornecer opções adicionais para ajudar os funcionários do 2Captcha a resolvê-lo corretamente
Opções de Captcha
Opção | Valor por defeito | Descrição |
---|---|---|
numeric | 0 | Define se o captcha contém símbolos numéricos ou outros veja mais informações na documentação API |
minLength | 0 | comprimento mínimo da resposta |
compMax | 0 | comprimento máximo da resposta |
phrase | 0 | define se a resposta contém ou não várias palavras |
caseSensitive | 0 | define se a resposta diferencia maiúsculas de minúsculas |
calc | 0 | define se captcha requer cálculo |
lang | - | define o idioma captcha, consulte a lista de idiomas suportados |
hintImg | - | uma imagem com dica mostrada aos trabalhadores com o captcha |
hintText | - | dica ou texto de tarefa mostrado aos trabalhadores com o captcha |
- Captcha Normal
- Captcha Texto
- reCAPTCHA v2
- reCAPTCHA v3
- FunCaptcha
- GeeTest
- KeyCaptcha
- Capy
- Grid
- Canvas
- ClickCaptcha
- Rotação
Para ignorar um captcha normal (texto distorcido na imagem) use o seguinte método. Este método também pode ser usado para reconhecer qualquer texto na imagem.
result = solver.normal('path/to/captcha.jpg', param1=..., ...)
Este método pode ser usado para ignorar um captcha que requer responder a uma pergunta fornecida em texto não encriptado.
result = solver.text('If tomorrow is Saturday, what day is today?', param1=..., ...)
Use este método para resolver o reCAPTCHA V2 e obter um token para fazer bypass a proteção.
result = solver.recaptcha(sitekey='6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-',
url='https://mysite.com/page/with/recaptcha',
param1=..., ...)
Este método fornece o solucionador reCAPTCHA V3 e retorna um token.
result = solver.recaptcha(sitekey='6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-',
url='https://mysite.com/page/with/recaptcha',
version='v3',
param1=..., ...)
Método de resolução FunCaptcha (Arkoselabs). Retorna um token.
result = solver.funcaptcha(sitekey='6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-',
url='https://mysite.com/page/with/funcaptcha',
param1=..., ...)
Método para resolver o captcha do puzzle GeeTest. Retorna um conjunto de tokens como JSON.
result = solver.geetest(gt='f1ab2cdefa3456789012345b6c78d90e',
challenge='12345678abc90123d45678ef90123a456b',
url='https://www.site.com/page/',
param1=..., ...)
Método baseado em token para resolver KeyCaptcha.
result = solver.keycaptcha(s_s_c_user_id=10,
s_s_c_session_id='493e52c37c10c2bcdf4a00cbc9ccd1e8',
s_s_c_web_server_sign='9006dc725760858e4c0715b835472f22-pz-',
s_s_c_web_server_sign2='2ca3abe86d90c6142d5571db98af6714',
url='https://www.keycaptcha.ru/demo-magnetic/',
param1=..., ...)
Método baseado em token para fazer bypass a captcha de puzzle Capy.
result = solver.capy(sitekey='PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v',
url='http://mysite.com/',
api_server='https://jp.api.capy.me/',
param1=..., ...)
O método Grid é originalmente chamado de método Old reCAPTCHA V2. O método pode ser usado para contornar qualquer tipo de captcha onde pode aplicar uma grelha na imagem e deve clicar em caixas de grade específicas. Retorna números de caixas.
result = solver.grid('path/to/captcha.jpg', param1=..., ...)
O método Canvas pode ser usado quando precisa de desenhar uma linha ao redor de um objeto na imagem. Retorna um conjunto de coordenadas de pontos para desenhar um polígono.
result = solver.canvas('path/to/captcha.jpg', param1=..., ...)
O método ClickCaptcha retorna as coordenadas dos pontos na imagem captcha. Pode ser usado se necessitar de clicar em pontos específicos da imagem.
result = solver.coordinates('path/to/captcha.jpg', param1=..., ...)
Este método pode ser usado para resolver um captcha que pede para girar um objeto. Usado principalmente para contornar o FunCaptcha. Retorna o ângulo de rotação.
result = solver.rotate('path/to/captcha.jpg', param1=..., ...)
Outros métodos
Métodos válidos adicionais usados durante o trabalho dos scripts principais
send / getResult
Estes métodos podem ser usados para envio manual de captcha e pesquisa de respostas.
import time
. . . . .
id = solver.send(file='path/to/captcha.jpg')
time.sleep(20)
code = solver.get_result(id)
balance
Use este método para obter o saldo da sua conta.
balance = solver.balance()
report
Use este método para relatar uma resposta captcha boa ou má.
solver.report(id, True) # captcha solved correctly
solver.report(id, False) # captcha solved incorrectly
Manipulação de erros
Possíveis variantes de erros padrão retornados pelo serviço ao processar pedidos
Caso de um solucionador de captcha de erro lance uma exceção. É importante lidar adequadamente com estes casos. Recomendamos usar try/except
para lidar com exceções.
Try:
result = solver.text('If tomorrow is Saturday, what day is today?')
Except ValidationException as e:
# invalid parameters passed
print(e)
Except NetworkException as e:
# network error occurred
print(e)
Except ApiException as e:
# api respond with error
print(e)
Except TimeoutException as e:
# captcha is not solved so far
print(e)
Proxies
Pode passar seu proxy como argumentos adicionais para métodos: recaptcha, funcaptcha e geetest. O proxy será encaminhado para a API para resolver o captcha.
proxy={
'type': 'HTTPS',
'uri': 'login:password@IP_address:PORT'
}
Chamadas async
Também pode fazer chamadas async com asyncio, por exemplo:
import asyncio
import concurrent.futures
from twocaptcha import TwoCaptcha
captcha_result = await captchaSolver(image)
async def captchaSolver(image):
loop = asyncio.get_running_loop()
with concurrent.future.ThreadPoolExecutor() as pool:
result = await loop.run_in_executor(pool, lambda: TwoCaptcha(API_KEY).normal(image))
return result