Gunakan halaman ini ketika alur otomatisasi Playwright Anda memerlukan jalur penyelesaian captcha yang stabil dengan panduan integrasi API yang praktis.
Death By Captcha (DBC) memungkinkan skrip Playwright memecahkan tantangan captcha melalui API alih-alih interaksi manual: skrip Anda mengekstrak parameter tantangan dari halaman, meminta solusi dari DBC, menyuntikkan hasil kembali ke halaman, dan melanjutkan alur. Halaman ini adalah quickstart: instalasi, contoh kode yang dapat dijalankan, dan catatan tugas yang didukung.
Node.js:
npm install playwright deathbycaptcha-lib
Python:
pip install deathbycaptcha-official
Gunakan kredensial akun DBC Anda di klien. Buat akun dan periksa harga dan saldo sebelum menjalankan alur.
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 lengkap yang dapat dijalankan: examples/playwright di repositori resmi klien Node.js
| Topik | Catatan |
|---|---|
| Jenis captcha (API) | reCAPTCHA v2 dan v3, Cloudflare Turnstile, GeeTest, DataDome, serta captcha gambar/teks. |
| Saldo | Solusi dibayar dari saldo akun; periksa sebelum melakukan dekode. |
| Percobaan ulang | Tidak adanya solusi bersifat sementara: coba lagi dengan backoff, seperti contoh resmi. |
| API vs ekstensi | Alur ini menggunakan API di dalam skrip Anda; ekstensi browser adalah jalur tanpa kode untuk penjelajahan manual. |
| Browser yang didukung | Chromium, Firefox, dan WebKit melalui Playwright (sampel diverifikasi di Chromium). |
| Daerah | Mengapa itu penting | Latihan yang disarankan |
|---|---|---|
| Konsistensi proxy | Mengurangi risiko ketidakcocokan verifikasi dalam aliran token. | Jaga agar jalur penyelesaian dan pengiriman tetap selaras dalam konteks otomatisasi. |
| Disiplin batas waktu | Mencegah antrian terhenti dan proses CI yang tidak stabil. | Gunakan percobaan ulang terbatas dengan penanganan fallback deterministik. |
| Penanganan khusus tipe | Kelas tantangan yang berbeda memerlukan bidang muatan yang berbeda. | Mulai dari halaman jenis API dan validasi satu jenis dalam satu waktu. |
Untuk peluncuran pemecah captcha Playwright, validasi satu jenis captcha terlebih dahulu, lalu perluas cakupan dengan pemeriksaan keandalan dan harga untuk skala produksi.