Bypass captcha in Ruby
Ruby gem for easy integration with the API of captcha solving service to bypass reCAPTCHA, Arkose captcha, Geetest and solve any other captchas. This is the easiest way to quickly integrate 2Captcha solving service into code and automate solving of any type of captcha.
Início rápidoInstalação
O pacote de scripts pode ser instalado usando o instalador de pacotes ou manualmente
Configuração
Descrição de todos os parâmetros necessários para configurar o pacote instalado
Uma instância da classe Api2Captcha
pode ser criada desta forma:
client = Api2Captcha.new('YOUR_API_KEY')
Também pode personalizar algumas das opções para a instância criada:
client = Api2Captcha.new("YOUR_API_KEY")
client.api_key = "YOUR_API_KEY"
Opções de instância Api2Captcha
Opção | Valor padrão | Descrição |
---|---|---|
soft_id | - | 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 |
default_timeout | 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 |
recaptcha_timeout | 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 |
polling_interval | 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ânciaApi2Captcha
, 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 |
min_len | 0 | comprimento mínimo da resposta |
max_len | 0 | comprimento máximo da resposta |
phrase | 0 | define se a resposta contém ou não várias palavras |
case_sensitive | 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 |
hint_image | - | uma imagem com dica mostrada aos trabalhadores com o captcha |
hint_text | - | 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 = client.normal({ image: 'path/to/captcha.jpg'})
# OR
result = client.normal({
image: 'https://site-with-captcha.com/path/to/captcha.jpg'
})
Este método pode ser usado para ignorar um captcha que requer responder a uma pergunta fornecida em texto não encriptado.
result = client.text({
textcaptcha:'If tomorrow is Saturday, what day is today?',
lang: "en"
})
Use este método para resolver o reCAPTCHA V2 e obter um token para fazer bypass a proteção.
result = client.recaptcha_v2({
googlekey: '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-',
pageurl: 'https://mysite.com/page/with/recaptcha_v2'
})
Este método fornece o solucionador reCAPTCHA V3 e retorna um token.
result = client.recaptcha_v3({
googlekey: '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-',
pageurl: 'https://mysite.com/page/with/recaptcha_v3',
version: 'v3',
score: 0.3,
action: 'verify'
})
Método de resolução FunCaptcha (Arkoselabs). Retorna um token.
result = client.funcaptcha({
publickey: "69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC",
pageurl: "https://mysite.com/page/with/funcaptcha",
surl: "https://client-api.arkoselabs.com"
})
Método para resolver o captcha do puzzle GeeTest. Retorna um conjunto de tokens como JSON.
result = client.geetest({
gt: 'f1ab2cdefa3456789012345b6c78d90e',
api_server: 'api-na.geetest.com',
challenge: '12345678abc90123d45678ef90123a456b',
pageurl: 'https://www.site.com/page/'
})
Método baseado em token para resolver KeyCaptcha.
result = client.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',
pageurl: 'https://www.keycaptcha.ru/demo-magnetic/'
})
Método baseado em token para fazer bypass a captcha de puzzle Capy.
result = client.capy({
sitekey: 'PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v',
pageurl: 'http://mysite.com/',
api_server: 'https://jp.api.capy.me/'
})
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 = client.grid({
image: 'path/to/captcha.jpg',
rows: 3,
cols: 3,
previous_id: 0,
lang: 'en',
hint_image: 'path/to/hint.jpg',
hint_text: 'Select all images with an Orange'
})
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 = client.canvas({
image: 'path/to/captcha.jpg',
previous_id: 0,
lang: 'en',
hint_image: 'path/to/hint.jpg',
hint_text: 'Draw around apple'
})
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 = client.coordinates({
image: 'path/to/captcha.jpg',
lang: 'en',
hint_image: 'path/to/hint.jpg',
hint_text: 'Connect the dots'
})
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 = client.rotate({
image: 'path/to/captcha.jpg',
angle: 40,
lang: 'en',
hint_image: 'path/to/hint.jpg',
hint_text: 'Put the images in the correct way'
})
Outros métodos
Métodos válidos adicionais usados durante o trabalho dos scripts principais
send / get_result
Estes métodos podem ser usados para envio manual de captcha e pesquisa de respostas.
# example for normal captcha
captcha_id = client.send('path/to/captcha.jpg')
# or for another captcha, for example for lemin
captcha_id = client.send({
method:"lemin",
captcha_id: "CROPPED_3dfdd5c_d1872b526b794d83ba3b365eb15a200b",
api_server: "api.leminnow.com",
div_id: "lemin-cropped-captcha",
pageurl: "https://www.site.com/page/"
})
time.sleep(20)
# Get result
result = client.get_result(captcha_id)
get_balance
Use este método para obter o saldo da sua conta.
balance = client.get_balance
report
Use este método para relatar uma resposta captcha boa ou má.
client.report(captcha_id, True) # captcha solved correctly
client.report(captcha_id, False) # captcha solved incorrectly
Manipulação de erros
Possíveis variantes de erros padr ão retornados pelo serviço ao processar pedidos
If case of an error captcha solver throws an exception. It's important to properly handle these cases. We recommend to use begin/rescue
to handle exceptions.
begin
result = client.text('If tomorrow is Saturday, what day is today?')
rescue Api2Captcha::ValidationException => e
# invalid parameters passed
puts(e)
rescue Api2Captcha::NetworkException => e
# network error occurred
puts(e)
rescue Api2Captcha::ApiException => e
# api respond with error
puts(e)
rescue Api2Captcha::TimeoutException => e
# captcha is not solved so far
puts(e)
end