Обход капчи на Go

Решайте капчи с Go модулем онлайн.

Пакет Go скриптов для простой интеграции с API сервиса решения капчи ruCaptcha для обхода reCAPTCHA, hCaptcha, Arkose captcha, Geetest и решения любых других капч.

Быстрый старт

Установка

Пакет скриптов можно установить с помощью установщика пакетов или вручную

GitHub

Чтобы установить api клиент, используйте эту команду:

go get -u github.com/2captcha/2captcha-go

Примеры кода, а также библиотеки и модули для интеграции с нашим API вы также можете найти в репозитории на GitHub.

Конфигурация

Описание всех необходимых параметров для конфигурирования установленного пакета

Экземпляр класса Client можно создать вот так:

client := api2captcha.NewClient('YOUR_API_KEY')

Также у вас есть возможность настраивать некоторые опции созданного экземпляра:

client.SoftId = 123
client.Callback = "https://your.site/result-receiver"
client.DefaultTimeout = 120
client.RecaptchaTimeout = 600
client.PollingInterval = 100
Опции экземпляра Client
ОпцияЗначение по умолчаниюОписание
softId-ваш id программного обеспечения, полученный после публикации в каталоге программ ruCaptcha
callback-URL вашего веб-сервера, который получает результат распознавания капчи. URL должен быть сначала зарегистрирован в настройках pingback вашей учетной записи
defaultTimeout120Таймаут опроса в секундах для всех типов капчи, кроме reCAPTCHA. Определяет, как долго модуль пытается получить ответ от конечной точки API res.php
recaptchaTimeout600Таймаут опроса reCAPTCHA в секундах. Определяет, как долго модуль пытается получить ответ от конечной точки API res.php
pollingInterval10Интервал в секундах между запросами к конечной точке API res.php, установка значений менее 5 секунд не рекомендуется
ВАЖНО: как только callback определен для одного экземпляра класса Client, все остальные методы возвращают только ID капчи и НЕ опрашивают API для получения результата. Результат будет отправлен на callback URL. Чтобы получить ответ вручную, используйте метод getResult

Решение капчи

Когда вы отправляете любую графическую капчу, вы можете передавать дополнительные параметры, которые помогут работникам ruCaptcha решить ее быстро и правильно.

Опции капчи
ОпцияЗначение по умолчаниюОписание
numeric0определяет, содержит ли капча числовые или другие символы, подробнее см. в документации по API
minLength0минимальная длина ответа
maxLength0максимальная длина ответа
phrase0определяет, содержит ли ответ несколько слов или нет
caseSensitive0определяет, чувствителен ли ответ к регистру
calc0определяет капчу, которая требует расчета
lang-определяет язык капчи, смотрите список поддерживаемых языков
hintImg-изображение с подсказкой, показанное работникам с помощью капчи
hintText-подсказка или текст задачи, показываемый работникам с помощью капчи

Базовый пример

В приведенном ниже примере показан базовый пример вызова распознавателя с обработкой ошибок.

cap := api2captcha.Normal{
   File: "/path/to/normal.jpg",
}

code, err := client.Solve(cap.ToRequest())
if err != nil {
  if err == api2captcha.ErrTimeout {
    log.Fatal("Timeout");
  } else if err == api2captcha.ErrApi {
    log.Fatal("API error");
  } else if err == api2captcha.ErrNetwork {
    log.Fatal("Network error");
  } else {
    log.Fatal(err);
  }
}
fmt.Println("code "+code)

Чтобы обойти обычную капчу (искаженный текст на изображении), используйте следующий метод. Этот метод также можно использовать для распознавания любого текста на изображении.

cap := api2captcha.Normal{
    File: "/path/to/normal.jpg",
    Numeric: 4,
    MinLen: 4,
    MaxLen: 20,
    Phrase: true,
    CaseSensitive: true,
    Lang: "en",
    HintImgFile: "/path/to/hint.jpg",
    HintText: "Type red symbols",
 }

Этот метод можно использовать для обхода капчи, которая требует ответа на вопрос в виде открытого текста

cap := api2captcha.Text{
    Text: "If tomorrow is Saturday, what day is today?",
    Lang: "en",
 }

Используйте этот метод для решения reCAPTCHA V2 и получения токена для обхода защиты

cap := api2captcha.ReCaptcha{
    SiteKey: "6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-",
    Url: "https://mysite.com/page/with/recaptcha",
    Invisible: true,
    Action: "verify",
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)

Этот метод позволяет обходить reCAPTCHA V3 и возвращает токен

cap := api2captcha.ReCaptcha{
    SiteKey: "6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-",
    Url: "https://mysite.com/page/with/recaptcha",
    Version: "v3",
    Action: "verify",
    Score: 0.3,
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)

Метод решения FunCaptcha (Аркоселабс). Возвращает токен для обхода капчи

cap := api2captcha.FunCaptcha{
    SiteKey: "69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC",
    Url: "https://mysite.com/page/with/funcaptcha",
    Surl: "https://client-api.arkoselabs.com",
    UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36",
    Data: map[string]string{"anyKey":"anyValue"},   
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)

Метод решения капчи головоломки GeeTest. Возвращает набор токенов в формате JSON

cap := api2captcha.GeeTest{
    GT: "f2ae6cadcf7886856696502e1d55e00c",
    ApiServer: "api-na.geetest.com",
    Challenge: "12345678abc90123d45678ef90123a456b",
    Url: "https://mysite.com/captcha.html",
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)

Используйте этот метод для решения hCaptcha. Возвращает токен для обхода капчи

cap := api2captcha.HCaptcha{
    SiteKey: "10000000-ffff-ffff-ffff-000000000001",
    Url: "https://mysite.com/captcha.html",   
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)

Метод решения KeyCaptcha на основе токенов

cap := api2captcha.KeyCaptcha{
    UserId: 10,
    SessionId: "493e52c37c10c2bcdf4a00cbc9ccd1e8",
    WebServerSign: "9006dc725760858e4c0715b835472f22",
    WebServerSign2: "9006dc725760858e4c0715b835472f22",
    Url: "https://www.keycaptcha.ru/demo-magnetic/",   
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)

Токен-основанный способ обхода капчи Capy puzzle

cap := api2captcha.Capy{
    SiteKey: "PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v",
    Url: "https://www.mysite.com/captcha/",   
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)

Этот метод изначально назывался Old reCAPTCHA V2. Его можно использовать для обхода любого типа капчи, когда вы можете применить сетку к изображению и вам нужно щелкнуть определенные поля сетки. Возвращает количество ячеек сетки

cap := api2captcha.Grid{
    File: "path/to/captcha.jpg",
    Rows: 3,
    Cols: 3,
    PreviousId: 0,
    CanSkip: false,
    Lang: "en",
    HintImageFile: "path/to/hint.jpg",
    HintText: "Select all images with an Orange",
}

Метод Canvas можно использовать, когда вам нужно нарисовать линию вокруг объекта на изображении. Возвращает набор координат точек для рисования многоугольника.

cap := api2captcha.Canvas{
    File: "path/to/captcha.jpg",
    PreviousId: 0,
    CanSkip: false,
    Lang: "en",
    HintImageFile: "path/to/hint.jpg",
    HintText: "Draw around apple",
}

Метод ClickCaptcha возвращает координаты точек на изображении капчи. Может использоваться, если вам нужно щелкнуть определенные точки на изображении.

cap := api2captcha.Coordinates{
    File: "path/to/captcha.jpg",
    Lang: "en",
    HintImageFile: "path/to/hint.jpg",
    HintText: "Connect the dots",
}

Этот метод можно использовать для решения капчи, которая просит повернуть объект. В основном используется для обхода FunCaptcha. Возвращает значение угла поворота.

cap := api2captcha.Rotate{
    File: "path/to/captcha.jpg",
    Angle: 40,
    Lang: "en",
    HintImageFile: "path/to/hint.jpg",
    HintText: "Put the images in the correct way",
}

Другие методы

Дополнительные допустимые методы применяемые в процессе работы основных скриптов

send / getResult

Этот метод можно использовать для ручной передачи капчи и получения ответов.

id, err := client.Send(cap.ToRequest())
if err != nil {
   log.Fatal(err);
}

time.Sleep(10 * time.Second)

code, err := client.GetResult(id)
if err != nil {
   log.Fatal(err);
}

if code == nil {
   log.Fatal("Not ready")
}

fmt.Println("code "+*code)

balance

Используйте этот метод, чтобы получить баланс своего аккаунта.

balance, err := client.GetBalance()
if err != nil {
   log.Fatal(err);
}

report

Используйте этот метод, чтобы сообщить о правильном или неправильном решении капчи.

err := client.Report(id, true) // solved correctly
err := client.Report(id, false) // solved incorrectly

Другие языки для интеграции с API сервиса