Utilisez cette page lorsque votre flux d'automatisation Playwright a besoin d'un chemin de résolution de captcha stable avec des conseils pratiques d'intégration d'API.
Death By Captcha (DBC) permet aux scripts Playwright de résolver les défis de captcha via l'API au lieu de l'interaction manuelle : votre script extrait les paramètres du défi de la page, demande une solution à DBC, réinjecte le résultat dans la page puis poursuit le flux. Cette page est le quickstart : installation, un exemple de code exécutable et les notes sur les tâches prises en charge.
Node.js:
npm install playwright deathbycaptcha-lib
Python:
pip install deathbycaptcha-official
Utilisez vos identifiants de compte DBC dans le client. Créez un compte et vérifiez les tarifs et le solde avant de lancer le flux.
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();
})();
Version complète exécutable : examples/playwright dans le dépôt officiel du client Node.js
| Sujet | Remarque |
|---|---|
| Types de captcha (API) | reCAPTCHA v2 et v3, Cloudflare Turnstile, GeeTest, DataDome et captchas image/texte. |
| Solde | Les solutions sont payées avec le solde du compte ; vérifiez-le avant de décoder. |
| Nouvelles tentatives | L'absence de solution est temporaire : réessayez avec backoff, comme le fait l'exemple officiel. |
| API contre extension | Ce flux utilise l'API dans votre script ; l'extension de navigateur est le chemin sans code pour la navigation manuelle. |
| Navigateurs pris en charge | Chromium, Firefox et WebKit via Playwright (échantillon vérifié sur Chromium). |
| Zone | Pourquoi c'est important | Pratique recommandée |
|---|---|---|
| Cohérence du proxy | Réduit le risque de non-concordance de vérification dans les flux de jetons. | Gardez le chemin de résolution et de soumission aligné dans le contexte d’automatisation. |
| Discipline de temps mort | Empêche les blocages de file d’attente et les exécutions irrégulières de CI. | Utilisez des tentatives limitées avec une gestion de secours déterministe. |
| Manipulation spécifique au type | Différentes classes de défi nécessitent différents champs de charge utile. | Partez des pages de type API et validez un type à la fois. |
Pour le déploiement du solveur captcha Playwright, validez d'abord un type de captcha, puis étendez la couverture avec des contrôles de fiabilité et de prix pour l'échelle de production.