Использование Playwright APIRequestContext с решением CAPTCHA

Автор: solvethree4 мин на чтение

Используйте request.newContext(), если вы уже знаете POST-эндпоинт приложения и поля формы. Этот метод создаёт HTTP-клиент без запуска Chromium. Чтобы отправить токен solvethree, не нужно взаимодействовать с полями в браузере.

Если приложению нужны файлы cookie, данные CSRF или другие поля формы, передайте и их. SDK решает CAPTCHA, но не воспроизводит процесс входа в приложение.

На этой странице

Подготовьте зависимости и целевой запрос

  1. 1.

    Установите зависимости

    Используйте Node.js 22+ и установите пакет playwright. Установите официальный JavaScript SDK из архива solvethree версии 0.1.0: solvethree-sdk-0.1.0.tgz, расположенного в /downloads/ на solvethree.com. Он импортируется как @solvethree/sdk; не рассчитывайте, что релиз доступен в реестре пакетов.

  2. 2.

    Задайте переменные окружения

    Передайте процессу Node.js SOLVETHREE_API_KEY, SOLVETHREE_PROXY и TARGET_URL. Храните API-ключ рабочего пространства на стороне сервера. TARGET_URL должен указывать на фактический POST-эндпоинт приложения, а не просто на страницу с CAPTCHA. Используйте HTTP- или HTTPS-URL прокси без пути, строки запроса и фрагмента.

  3. 3.

    Проверьте профиль сайта и действие

    Для целевого имени хоста нужен активный профиль, доступный вашему рабочему пространству. Настройте его в консоли перед решением CAPTCHA: передача имени хоста не создаёт профиль. В примере используется действие login; измените его, если целевой сайт ожидает другое действие. По умолчанию запрос использует reCAPTCHA Enterprise v3.

Перед запуском примера подготовьте обязательные поля формы и всё необходимое для сеанса приложения. Пример отправляет только поле ответа CAPTCHA. Если имя хоста ещё не настроено, см. настройку профиля сайта.

Решите CAPTCHA и отправьте запрос через тот же прокси

Playwright APIRequestContext · браузер не требуется
import { request } from 'playwright';
import { Solvethree } from '@solvethree/sdk';
const client = new Solvethree({ apiKey: process.env.SOLVETHREE_API_KEY });
const target = new URL(process.env.TARGET_URL);
const proxy = new URL(process.env.SOLVETHREE_PROXY);
const result = await client.solve({ site: target.hostname, action: 'login', proxy: process.env.SOLVETHREE_PROXY });
const proxyConfig = { server: `${proxy.protocol}//${proxy.host}`, username: decodeURIComponent(proxy.username), password: decodeURIComponent(proxy.password) };

const targetClient = await request.newContext({
  proxy: proxyConfig, timeout: 30000,
  extraHTTPHeaders: { 'User-Agent': result.solution.userAgent, 'sec-ch-ua': result.solution.secChUa },
  // storageState: 'your-application-session.json', // only if your flow needs it
});
try {
  const response = await targetClient.post(target.href, {
    form: { 'g-recaptcha-response': result.solution.token }, maxRedirects: 0,
  });
  console.log('Application HTTP status:', response.status());
  // Inspect the response and supply the application's actual fields/CSRF/session.
} finally { await targetClient.dispose(); }

client.solve() создаёт задачу один раз и опрашивает её статус, пока она не будет готова или не возникнет исключение. В примере один прокси используется и для решения CAPTCHA, и для отправки запроса. Для Playwright адрес прокси-сервера отделяется от учётных данных, а имя пользователя и пароль декодируются.

Контекст запросов передаёт solution.userAgent и solution.secChUa в заголовках. Форма отправляет solution.token в поле g-recaptcha-response, а не ID задачи. Используйте прокси вместе с полученными данными браузера; не заменяйте их заголовками другого браузера и не отправляйте токен другому целевому сайту.

Добавьте в форму фактические поля приложения, включая учётные данные или данные CSRF, если они требуются. Если у вас уже есть необходимый сеанс приложения, включите необязательный параметр storageState и укажите путь к сохранённому состоянию этого сеанса.

APIRequestContext использует собственное хранилище cookie, поэтому запросы в одном контексте сохраняют полученные им файлы cookie. Он не обменивается файлами cookie с отдельным контекстом браузера автоматически. Выполняйте предварительные запросы сеанса и итоговый POST-запрос в одном контексте, если им нужны общие файлы cookie. Блок finally освобождает ресурсы контекста после завершения отправки.

Проверьте ответ приложения, прежде чем решать CAPTCHA повторно

Пример выводит HTTP-статус ответа приложения, но не подтверждает успешный вход. Если для maxRedirects задано нулевое значение, вы увидите исходный ответ без перехода по перенаправлению. Проверьте его тело, заголовки и файлы cookie на соответствие ожидаемому ответу приложения при успешной операции. Одного перенаправления или HTTP 200 может быть недостаточно, чтобы определить, завершилась ли операция успешно.

Задача готова, но приложение отклоняет POST-запрос.

Сначала проверьте исходящий запрос: поле токена, имя хоста и действие, прокси, полученные данные браузера, обязательные поля формы, значение CSRF и файлы cookie сеанса.

Попробуйте: Исправьте отсутствующие или несоответствующие данные запроса, прежде чем оплачивать ещё одно решение CAPTCHA. Готовая задача предоставляет пригодное к использованию решение, но не гарантирует, что приложение его примет.

Решение CAPTCHA завершается неудачей задачи.

Прочитайте errorCode и error; не считайте любой сбой проблемой с балансом.

Попробуйте: Прекратите опрос этой задачи и устраните указанную причину. Средства за неудачные решения возвращаются. О том, как трактовать ошибки, см. обработку ошибок API.

Истекает время ожидания создания задачи или обрывается соединение.

Проверьте, есть ли у вас ID задачи и использовали ли вы requestId. Тайм-аут соединения не означает, что создать задачу не удалось.

Попробуйте: Получите существующую задачу, если у вас есть её ID. Чтобы можно было восстановить результат запроса на создание, передавайте requestId и повторно используйте его с абсолютно теми же входными данными: это вернёт существующую задачу. Не начинайте сразу отдельную новую попытку решения.

Запрос к приложению возвращает ошибку HTTP.

Проверяйте ответ целевого приложения отдельно от результата задачи solvethree.

Попробуйте: Обработайте ответ с неуспешным статусом, прежде чем интерпретировать его тело как данные успешного ответа. Исправьте запрос к приложению или указанную ошибку сервера, а не предполагайте, что причиной стал токен.

Запустите первую задачу.

Начните с $5 на балансе рабочего пространства.

Создать рабочее пространство
Использование Playwright APIRequestContext с решением CAPTCHA · solvethree