Utilice esta página cuando su flujo de automatización Playwright necesite una ruta estable para resolver captcha con una guía práctica de integración de API.
Death By Captcha (DBC) permite que los scripts de Playwright resuelvan desafíos de captcha a través de la API en lugar de la interacción manual: tu script extrae los parámetros del desafío de la página, solicita una solución a DBC, inyecta el resultado de vuelta en la página y continúa el flujo. Esta página es el inicio rápido: instalación, un código de ejemplo ejecutable y notas de las tareas admitidas.
Node.js:
npm install playwright deathbycaptcha-lib
Python:
pip install deathbycaptcha-official
Usa las credenciales de tu cuenta de DBC en el cliente. Crea una cuenta y revisa precios y saldo antes de ejecutar el flujo.
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();
})();
Versión completa ejecutable: examples/playwright en el repositorio oficial del cliente Node.js
| Tema | Nota |
|---|---|
| Tipos de captcha (API) | reCAPTCHA v2 y v3, Cloudflare Turnstile, GeeTest, DataDome y captchas de imagen/texto. |
| Saldo | Las soluciones se pagan con el saldo de la cuenta; compruébalo antes de decodificar. |
| Reintentos | Que no devuelva solución significa temporal: reintenta con espera, como hace el ejemplo oficial. |
| API frente a la extensión | Este flujo usa la API dentro de tu script; la extensión del navegador es la ruta sin código para la navegación manual. |
| Navegadores admitidos | Chromium, Firefox y WebKit mediante Playwright (muestra verificada en Chromium). |
| Área | Por qué es importante | Práctica recomendada |
|---|---|---|
| Coherencia del proxy | Reduce el riesgo de desajuste de verificación en los flujos de tokens. | Mantenga la ruta de resolución y envío alineada en el contexto de automatización. |
| Disciplina de tiempo muerto | Evita paradas en colas y ejecuciones de CI inestables. | Utilice reintentos limitados con manejo de respaldo determinista. |
| Manejo específico del tipo | Diferentes clases de desafío necesitan diferentes campos de carga útil. | Comience desde páginas de tipo API y valide un tipo a la vez. |
Para implementar el solucionador de captcha de Playwright, primero valide un tipo de captcha y luego amplíe la cobertura con verificaciones de confiabilidad y precios para la escala de producción.