CaptchaNo
[ ИНТЕГРАЦИЯ ]

Решение капчи для
Puppeteer

Проходите проверку прямо в ходе запуска, а не проваливайте задание. Рабочий пример на Node.js и три фактора, от которых зависит, будет ли принят ваш токен.

Puppeteer · Node.js
import puppeteer from "puppeteer";

const CAPTCHANO_KEY = "cn-YOUR_API_KEY";

async function solve(task) {
  const headers = {
    Authorization: `Bearer ${CAPTCHANO_KEY}`,
    "Content-Type": "application/json",
  };
  const res = await fetch("https://api.captchano.com/v1/solve?wait=60", {
    method: "POST",
    headers,
    body: JSON.stringify(task),
  });
  let data = await res.json();
  // A solve can outlast the 60 s wait: poll the task until it finishes.
  while (data.status === "queued" || data.status === "solving") {
    await new Promise((r) => setTimeout(r, 5000));
    const poll = await fetch(`https://api.captchano.com/v1/task/${data.id}`, { headers });
    data = await poll.json();
  }
  if (data.status !== "ready") throw new Error(JSON.stringify(data.error ?? data));
  return data.solution; // { token, userAgent }
}

const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto("https://example.com/signup");

const sitekey = await page.$eval("[data-sitekey]", (el) => el.getAttribute("data-sitekey"));
const { token, userAgent } = await solve({ type: "turnstile", sitekey, url: page.url() });

// Turnstile binds the token to a user agent: replay the one it was minted with.
if (userAgent) await page.setUserAgent(userAgent);
await page.evaluate((t) => {
  document.querySelector('[name="cf-turnstile-response"]').value = t;
}, token);
await page.click('button[type="submit"]');

От чего зависит, будет ли принят токен

  1. Передавайте свой прокси. Токен должен быть получен с того же исходящего IP, с которого он отправляется. Для систем с оценкой сессии это обязательное условие, а не оптимизация.
  2. Совпадение user agent. Turnstile и ряд антибот-систем привязывают токен к user agent. Мы возвращаем использованный user agent, чтобы вы могли воспроизвести его в точности.
  3. Запрашивайте как можно позже. Токены истекают примерно через 120 секунд. Запрашивайте токен, когда будете готовы к отправке.

Блокирующий вызов или опрос

В примере используется ?wait=60, поэтому вызов возвращает готовое решение, и шаг в Puppeteer остаётся линейным. Если не хотите держать соединение, уберите параметр, сохраните полученный id и опрашивайте GET /v1/task/{id} каждые пять секунд. Оплаченный токен можно получить в течение десяти минут, так что обрыв соединения не стоит вам решения.

Стоимость

$0.00598 за каждое успешное решение reCAPTCHA v2; неудачные решения никогда не оплачиваются. Цены на все типы проверок — на странице цен, полный формат запроса — в справочнике API.

[ КАК ЭТО РАБОТАЕТ ]

Как решение встраивается в Puppeteer

Puppeteer управляет Chromium из Node.js. Решение — это один fetch между page.goto и нажатием кнопки отправки, а page.evaluate помещает токен туда, где его ожидает страница.

  1. 01
    Запустите с вашим прокси

    Запустите Chromium с --proxy-server и задайте user agent, который передадите в запрос на решение.

  2. 02
    Прочитайте sitekey

    page.$eval('[data-sitekey]', el => el.dataset.sitekey) и имя callback, если оно есть.

  3. 03
    Решите

    Вызовите API через fetch с ?wait=60; ответ содержит токен и использованный user agent.

  4. 04
    Подставьте токен и отправьте

    page.evaluate, чтобы записать токен и вызвать callback, затем нажмите кнопку отправки.

Как передать токен на страницу

page.evaluate заполняет поле ответа и вызывает callback в контексте страницы.

[ ПОДВОДНЫЕ КАМНИ ]

Где интеграции обычно ломаются

Аутентификация прокси

Chromium игнорирует учётные данные в --proxy-server. Используйте page.authenticate для браузера и передавайте полный URL прокси в запрос на решение.

Виджеты в iframe

Виджет находится в iframe, а поле ответа — в основном фрейме. Подставляйте токен в основном фрейме.

Устаревший токен при повторе

Токены одноразовые. Если отправка не удалась, решите капчу заново, а не используйте первый токен повторно.

[ ВОПРОСЫ ]

Частые вопросы о капче в Puppeteer

Нужен ли puppeteer-extra или плагин для капчи?

Нет. Достаточно одного fetch к API и одного вызова page.evaluate, и вы полностью контролируете, когда происходит решение и сколько оно стоит.

Работает ли это в headless-режиме?

Да. Токен выпускается нашей инфраструктурой, а не вашим браузером, поэтому для самого решения не важно, headless он или нет. Сайты могут относиться к headless-браузерам с большим подозрением, поэтому реалистичный user agent всё равно помогает.

Можно ли использовать это с Playwright для Node?

Да. Код почти идентичен; page.evaluate и page.locator из Playwright заменяют аналоги из Puppeteer.

Как решить Cloudflare Turnstile в Puppeteer?

Прочитайте sitekey из виджета Turnstile, отправьте type turnstile с URL страницы, затем задайте значение поля cf-turnstile-response и вызовите callback, если страница его объявляет.

[ ЧТО ПОЧИТАТЬ ]

Полезные руководства

Готовы начать?

Начните с бесплатного 3-дневного пробного периода, а по мере роста трафика платите за каждое успешное решение. Для пробного периода карта не нужна.

Посмотреть тарифы
Вы ИИ-агент? Посмотрите варианты подключения →