
Emma Foster
Machine Learning Engineer

TL;DR: Panduan ini menunjukkan cara melewati CAPTCHA dalam otomatisasi browser Playwright menggunakan penyelesaian berbasis AI. Pelajari cara secara otomatis menangani tantangan reCAPTCHA dan Cloudflare Turnstile dengan contoh kode yang berfungsi. Lihat Integrasi Playwright CapSolver
Saat membangun otomatisasi browser dengan Playwright, menghadapi tantangan CAPTCHA adalah hambatan umum yang dapat menghentikan alur kerja Anda. Baik Anda melakukan penggalian data, menjalankan pengujian otomatis, atau mengumpulkan intelijen pasar, tantangan ini mengganggu proses otomatisasi dan memerlukan intervensi manual—yang menggagalkan tujuan pemrograman dari awal.
Panduan ini mencakup cara mengintegrasikan penyelesaian CAPTCHA berbasis AI ke dalam otomatisasi Playwright Anda, memungkinkan penanganan yang mulus terhadap tantangan reCAPTCHA dan Cloudflare Turnstile tanpa mengganggu alur kerja Anda.
CAPTCHA muncul ketika situs web mendeteksi perilaku yang berbeda dari pola navigasi manusia biasa. Pemicu umum meliputi:
Bagi pengembang yang menggunakan Playwright untuk tugas otomatisasi yang sah, memahami mengapa CAPTCHA muncul membantu baik dalam mencegahnya maupun menanganinya secara baik ketika terjadi.
Layanan penyelesaian CAPTCHA berbasis AI seperti CapSolver menggunakan pembelajaran mesin dan visi komputer untuk secara otomatis mengenali dan menyelesaikan tantangan. Alur kerjanya terintegrasi secara mulus ke dalam otomatisasi Playwright:
Pendekatan otomatis ini menghilangkan intervensi manual dan menjaga otomatisasi Anda berjalan terus-menerus.
Data industri menunjukkan bahwa solusi berbasis AI mencapai tingkat akurasi 95-99% untuk jenis tantangan umum, membuatnya dapat diandalkan untuk alur kerja otomatisasi produksi.
Pertama, instal dependensi yang diperlukan:
npm install playwright capsolver
Inisialisasi klien CapSolver dengan kunci API Anda:
const CapSolver = require('capsolver');
const capSolver = new CapSolver({ apiKey: 'KUNCI_API_ANDA' });
reCAPTCHA v2 biasanya menampilkan tantangan kotak centang atau ujian pemilihan gambar. Berikut adalah integrasi lengkap:
const { chromium } = require('playwright');
async function solveRecaptchaV2Example() {
// Inisialisasi CapSolver
const CapSolver = require('capsolver');
const solver = new CapSolver({ apiKey: 'KUNCI_API_ANDA' });
// Jalankan browser
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
try {
// Navigasi ke halaman target
await page.goto('https://example.com/login');
// Deteksi reCAPTCHA v2
const siteKey = await page.evaluate(() => {
const element = document.querySelector('[data-sitekey]');
return element ? element.getAttribute('data-sitekey') : null;
});
if (siteKey) {
console.log('reCAPTCHA v2 terdeteksi, sedang diselesaikan...');
// Selesaikan melalui CapSolver
const solution = await solver.recaptcha({
websiteURL: page.url(),
websiteKey: siteKey,
isEnterprise: false
});
// Set token solusi
await page.evaluate((token) => {
const textarea = document.getElementById('g-recaptcha-response');
if (textarea) textarea.value = token;
}, solution.gRecaptchaResponse);
// Panggil callback jika ada
const callback = await page.evaluate(() => {
const el = document.querySelector('[data-callback]');
return el ? el.getAttribute('data-callback') : null;
});
if (callback) {
await page.evaluate((cb) => {
eval(cb + '()');
}, callback);
}
console.log('reCAPTCHA v2 berhasil dilewati');
}
// Lanjutkan dengan otomatisasi Anda
await page.fill('#username', 'user@example.com');
await page.fill('#password', 'password123');
await page.click('#login-btn');
} catch (error) {
console.error('Error:', error.message);
} finally {
await browser.close();
}
}
solveRecaptchaV2Example();
reCAPTCHA v3 berjalan secara diam-diam di latar belakang dan mengembalikan skor daripada tantangan visual. Berikut cara menanganinya:
const { chromium } = require('playwright');
async function solveRecaptchaV3Example() {
// Inisialisasi CapSolver
const CapSolver = require('capsolver');
const solver = new CapSolver({ apiKey: 'KUNCI_API_ANDA' });
// Jalankan browser
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
try {
await page.goto('https://example.com/dashboard');
// Ekstrak kunci reCAPTCHA v3
const siteKey = await page.evaluate(() => {
const scripts = document.querySelectorAll('script[src*="recaptcha"]');
for (const script of scripts) {
const src = script.src;
const keyMatch = src.match(/k=([^&]+)/);
if (keyMatch) return keyMatch[1];
}
return null;
});
if (siteKey) {
console.log('reCAPTCHA v3 terdeteksi');
// Selesaikan dengan persyaratan skor
const solution = await solver.recaptcha({
websiteURL: page.url(),
websiteKey: siteKey,
isEnterprise: false,
pageAction: 'homepage'
});
console.log('Token diterima, skor:', solution.score);
// Simpan token untuk permintaan API
await page.evaluate((token) => {
window.__captchaToken = token;
}, solution.gRecaptchaResponse);
// Gunakan token dalam permintaan berikutnya
const response = await page.evaluate(async (token) => {
const res = await fetch('/api/user-profile', {
headers: { 'X-Recaptcha-Token': token }
});
return await res.json();
}, solution.gRecaptchaResponse);
console.log('Data diperoleh:', response);
}
} catch (error) {
console.error('Error:', error.message);
} finally {
await browser.close();
}
}
solveRecaptchaV3Example();
Cloudflare Turnstile muncul sebagai tantangan yang tidak terlihat atau widget verifikasi. Berikut pendekatan lengkap:
const { chromium } = require('playwright');
async function solveCloudflareTurnstileExample() {
// Inisialisasi CapSolver
const CapSolver = require('capsolver');
const solver = new CapSolver({ apiKey: 'KUNCI_API_ANDA' });
// Jalankan browser dengan pengaturan stealth
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext({
viewport: { width: 1920, height: 1080 },
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
});
const page = await context.newPage();
try {
await page.goto('https://example-protected.com/', {
waitUntil: 'domcontentloaded',
timeout: 30000
});
// Periksa tantangan Cloudflare
const isCFChallenge = await page.evaluate(() => {
return document.title.includes('Just a moment') ||
document.querySelector('#cf-challenge') !== null;
});
if (isCFChallenge) {
console.log('Tantangan Cloudflare terdeteksi');
// Tunggu tantangan muncul
await page.waitForTimeout(2000);
// Deteksi widget Turnstile
const siteKey = await page.evaluate(() => {
const turnstile = document.querySelector('.cf-turnstile');
return turnstile ? turnstile.getAttribute('data-sitekey') : null;
});
if (siteKey) {
console.log('Turnstile terdeteksi, sedang diselesaikan...');
// Selesaikan Turnstile
const solution = await solver.turnstile({
websiteURL: page.url(),
websiteKey: siteKey
});
console.log('Token diterima');
// Sisipkan token ke halaman
await page.evaluate((token) => {
// Buat atau perbarui bidang token
let tokenField = document.querySelector('[name="cf-turnstile-response"]');
if (!tokenField) {
tokenField = document.createElement('input');
tokenField.type = 'hidden';
tokenField.name = 'cf-turnstile-response';
document.body.appendChild(tokenField);
}
tokenField.value = token;
// Panggil callback jika ada
const turnstile = document.querySelector('.cf-turnstile');
if (turnstile && turnstile.dataset.callback) {
window[turnstile.dataset.callback](token);
}
}, solution.token);
// Tunggu tantangan selesai
await page.waitForTimeout(3000);
console.log('Cloudflare Turnstile berhasil dilewati');
}
}
// Verifikasi halaman dimuat
const title = await page.title();
console.log('Judul halaman:', title);
} catch (error) {
console.error('Error:', error.message);
} finally {
await browser.close();
}
}
solveCloudflareTurnstileExample();
Berikut contoh lengkap yang menggabungkan deteksi, penyelesaian, dan logika pengulangan untuk penggunaan produksi:
const { chromium } = require('playwright');
const CapSolver = require('capsolver');
class PlaywrightAutomation {
constructor(apiKey) {
this.solver = new CapSolver({ apiKey });
}
async detectAndSolve(page) {
// Periksa reCAPTCHA v2
const reCaptchaV2Key = await page.evaluate(() => {
const el = document.querySelector('[data-sitekey]');
return el?.getAttribute('data-sitekey');
});
// Periksa Cloudflare Turnstile
const turnstileKey = await page.evaluate(() => {
const el = document.querySelector('.cf-turnstile');
return el?.getAttribute('data-sitekey');
});
if (reCaptchaV2Key) {
console.log('Menyelesaikan reCAPTCHA v2...');
return await this.solveRecaptchaV2(page, reCaptchaV2Key);
}
if (turnstileKey) {
console.log('Menyelesaikan Cloudflare Turnstile...');
return await this.solveTurnstile(page, turnstileKey);
}
return null;
}
async solveRecaptchaV2(page, siteKey) {
const solution = await this.solver.recaptcha({
websiteURL: page.url(),
websiteKey: siteKey
});
await page.evaluate((token) => {
const textarea = document.getElementById('g-recaptcha-response');
if (textarea) textarea.value = token;
}, solution.gRecaptchaResponse);
return solution;
}
async solveTurnstile(page, siteKey) {
const solution = await this.solver.turnstile({
websiteURL: page.url(),
websiteKey: siteKey
});
await page.evaluate((token) => {
let tokenField = document.querySelector('[name="cf-turnstile-response"]');
if (!tokenField) {
tokenField = document.createElement('input');
tokenField.type = 'hidden';
tokenField.name = 'cf-turnstile-response';
document.body.appendChild(tokenField);
}
tokenField.value = token;
}, solution.token);
return solution;
}
async run(url, steps) {
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
try {
await page.goto(url);
// Periksa dan selesaikan CAPTCHA jika diperlukan
await this.detectAndSolve(page);
// Jalankan langkah otomatisasi Anda
for (const step of steps) {
await step(page);
}
} finally {
await browser.close();
}
}
}
// Contoh penggunaan
const automation = new PlaywrightAutomation('KUNCI_API_ANDA');
automation.run('https://example.com/form', [
(page) => page.fill('#name', 'John Doe'),
(page) => page.fill('#email', 'john@example.com'),
(page) => page.click('#submit')
]).then(() => console.log('Otomatisasi selesai'))
.catch(err => console.error('Error:', err));
Pasaran penggalian web sedang mengalami pertumbuhan signifikan sebagai organisasi memprioritaskan pengambilan keputusan berbasis data, membuat solusi otomatis semakin penting untuk alur kerja pengembangan modern.
Untuk contoh lebih rinci, lihat dokumentasi integrasi Playwright lengkap dan pelajari cara mengintegrasikan CapSolver dengan Playwright.
Ya, dengan mengintegrasikan layanan penyelesaian CAPTCHA berbasis AI seperti CapSolver, Playwright dapat secara otomatis mendeteksi dan menyelesaikan tantangan. Token solusi dikirim secara programatis, memungkinkan otomatisasi terus berjalan tanpa intervensi manual.
AI-powered solving biasanya selesai dalam 3-10 detik untuk kebanyakan jenis tantangan. Ini jauh lebih cepat dibandingkan alternatif berbasis manusia, yang bisa memakan waktu 10-45 detik termasuk waktu antrian.
Ya, CapSolver mendukung reCAPTCHA v3 dengan persyaratan skor minimum yang dapat dikonfigurasi. Anda dapat menetapkan ambang batas skor (0,1-0,9) sesuai kebutuhan untuk tingkat ketatnya tantangan yang berbeda.
Meskipun Anda tidak bisa menghilangkan CAPTCHA sepenuhnya, Anda dapat mengurangi frekuensinya dengan menggunakan pengaturan browser stealth, mengacak waktu antar tindakan, mengganti user agent, dan menggunakan proxy rumah tangga. Namun, beberapa situs web tetap akan menampilkan tantangan terlepas dari langkah pencegahan yang diambil.
Implementasikan logika ulang dengan backoff eksponensial untuk percobaan yang gagal. CapSolver dapat menyelesaikan kebanyakan tantangan dengan sukses, tetapi variasi yang kompleks mungkin terkadang memerlukan beberapa percobaan. Penanganan kesalahan yang tepat memastikan otomatisasi Anda tetap tangguh.
Ya, CapSolver menyediakan SDK dan dukungan API untuk Playwright, Puppeteer, Selenium, serta ekstensi browser langsung. Pendekatan integrasinya mirip di berbagai alat dengan perbedaan sintaks minor.
Ya, ketika digunakan secara bertanggung jawab untuk tujuan otomatisasi yang sah. CapSolver berkomitmen pada praktik teknologi etis dan menyediakan layanan yang membantu pengembang mengotomatisasi alur kerja mereka yang diizinkan secara lebih efisien. Pastikan aktivitas otomatisasi Anda sesuai dengan ketentuan layanan situs target dan hukum yang berlaku. Tinjau panduan kepatuhan CapSolver di sini untuk praktik terbaik.
Membandingkan layanan penyelesaian CAPTCHA yang ditenagai AI dan manusia berdasarkan kecepatan, akurasi, skalabilitas, keandalan, dan efisiensi biaya untuk alur kerja otomatisasi modern.

Pelajari bagaimana pemecah reCAPTCHA bekerja, di mana API token cocok, dan cara merencanakan alur kerja QA, penyedotan data, dan otomasi yang aman dengan CapSolver.
