Используйте эту страницу, если вашему процессу автоматизации Playwright требуется стабильный путь решения капчи с практическим руководством по интеграции API.
Death By Captcha (DBC) позволяет скриптам Playwright решать капчи через API вместо ручного взаимодействия: ваш скрипт извлекает параметры страницы, запрашивает решение у DBC, внедряет результат обратно на страницу и продолжает выполнение. Эта страница — быстрый старт: установка, рабочий пример кода и заметки по поддерживаемым задачам.
Node.js:
npm install playwright deathbycaptcha-lib
Python:
pip install deathbycaptcha-official
Используйте данные учётной записи DBC в клиенте. Создайте аккаунт и проверьте тарифы и баланс перед запуском сценария.
const { chromium } = require('playwright');
const { HttpClient } = require('deathbycaptcha-lib');
const client = new HttpClient(process.env.DBC_USERNAME, process.env.DBC_PASSWORD);
const DEMO_URL = 'https://www.google.com/recaptcha/api2/demo';
async function solveRecaptchaV2(pageUrl, sitekey) {
const balance = await new Promise((resolve, reject) =>
client.get_balance((b) => (b ? resolve(b) : reject(new Error('Could not read balance')))));
if (balance <= 0) throw new Error('No balance - top up before solving.');
return new Promise((resolve, reject) =>
client.decode(
{ extra: { type: 4, token_params: JSON.stringify({ googlekey: sitekey, pageurl: pageUrl }) } },
(solution) => (solution && solution.text ? resolve(solution.text) : reject(new Error('No solution yet - retry')))
));
}
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto(DEMO_URL, { timeout: 60000 });
// 1. extract the challenge parameters
const sitekey = await page.getAttribute('#recaptcha-demo', 'data-sitekey');
// 2. request the solution token from DBC (type 4 = reCAPTCHA v2 token)
const token = await solveRecaptchaV2(DEMO_URL, sitekey);
// 3. inject the token and trigger the page callback
await page.evaluate((t) => {
const el = document.getElementById('g-recaptcha-response');
if (!el) return;
el.style.display = 'block';
el.value = t;
el.dispatchEvent(new Event('input', { bubbles: true }));
el.dispatchEvent(new Event('change', { bubbles: true }));
const cfg = window.___grecaptcha_cfg;
if (!cfg || !cfg.clients) return;
for (const k of Object.keys(cfg.clients)) {
const c = cfg.clients[k];
for (const key of Object.keys(c)) {
const item = c[key];
if (item && typeof item.callback === 'function') return item.callback(t);
if (item && item.W && typeof item.W.callback === 'function') return item.W.callback(t);
}
}
}, token);
// 4. submit and wait for success
await page.click('#recaptcha-demo-submit');
await page.waitForSelector('.recaptcha-success', { timeout: 15000 });
console.log('solved');
await browser.close();
})();
Полная рабочая версия: examples/playwright в официальном репозитории клиента Node.js
| Тема | Примечание |
|---|---|
| Типы капч (API) | reCAPTCHA v2 и v3, Cloudflare Turnstile, GeeTest, DataDome, а также изображения/текстовые капчи. |
| Баланс | Решения оплачиваются с баланса аккаунта; проверьте его перед декодированием. |
| Повторные попытки | Если решение не вернулось — это временная ситуация: повторите запрос с задержкой, как в официальном примере. |
| API против расширения | Этот сценарий использует API внутри вашего скрипта; браузерное расширение — это путь без кода для ручного просмотра. |
| Поддерживаемые браузеры | Chromium, Firefox и WebKit через Playwright (пример проверен в Chromium). |
| Площадь | Почему это важно | Рекомендуемая практика |
|---|---|---|
| Согласованность прокси | Снижает риск несоответствия проверок в потоках токенов. | Сохраняйте путь решения и отправки в контексте автоматизации. |
| Дисциплина тайм-аута | Предотвращает зависания в очередях и нестабильную работу CI. | Используйте ограниченные повторы с детерминированной обработкой резервного варианта. |
| Обработка в зависимости от типа | Разным классам задач нужны разные поля полезной нагрузки. | Начните со страниц типов API и проверяйте один тип за раз. |
При развертывании средства решения капчи Playwright сначала подтвердите один тип капчи, а затем расширьте охват с помощью проверок надежности и цен для масштаба производства.