
Emma Foster
Machine Learning Engineer

Poin-Poin Utama
Otomatisasi pencarian AI dan scraping web, alat seperti Puppeteer telah menjadi tidak terpisahkan untuk mengendalikan browser tanpa tampilan dan mensimulasikan interaksi manusia. Namun, seiring otomatisasi meningkat, demikian pula tingkat keamanan anti-bot. Salah satu tantangan paling tangguh saat ini adalah AWS WAF CAPTCHA, yang sering mengganggu pengumpulan data skala besar, menyebabkan kegagalan tugas dan pemborosan sumber daya.
Artikel ini memberikan panduan teknis yang terfokus untuk pengembang JavaScript yang menggunakan Puppeteer. Kami akan menunjukkan praktik terbaik yang sangat efektif: mengintegrasikan Ekstensi CapSolver langsung ke dalam pengaturan Puppeteer Anda. Pendekatan ini memungkinkan ekstensi menangani proses penyelesaian CAPTCHA yang kompleks dan berbasis AI untuk tantangan AWS WAF secara mulus. Selain itu, untuk skenario yang memerlukan pendekatan murni tanpa tampilan dan berbasis API, kami akan memberikan contoh JavaScript yang rinci menggunakan API CapSolver, memastikan otomatisasi pencarian AI Anda tetap stabil, tidak terganggu, dan sangat sukses.
AWS WAF CAPTCHA adalah lapisan keamanan yang kuat yang melebihi pengenalan gambar sederhana. Ini sering melibatkan:
aws-waf-token yang valid untuk dimasukkan dalam permintaan berikutnya, yang hanya dihasilkan setelah tantangan diselesaikan dengan sukses.Untuk otomatisasi pencarian AI skala besar, menangani tantangan ini secara manual tidak praktis. Inilah saatnya alat penyelesaian CAPTCHA khusus, khususnya yang diintegrasikan langsung ke lingkungan browser atau melalui API, menjadi praktik terbaik yang penting.
Ekstensi CapSolver berfungsi sebagai jembatan, secara otomatis mendeteksi dan menyelesaikan tantangan CAPTCHA yang dihadapi browser dan menyisipkan token solusi yang diperlukan. Ini adalah metode yang jauh lebih sederhana dan lebih andal untuk otomatisasi browser daripada menggunakan API secara langsung di skrip Puppeteer Anda.
Sebelum mengintegrasikan dengan Puppeteer, Anda memerlukan file ekstensi dan kunci API Anda yang dikonfigurasi.
./capsolver-extension).config.js atau serupa) dan masukkan kunci API CapSolver Anda. Ini mengautentikasi ekstensi dengan akun Anda.Fungsi puppeteer.launch() Puppeteer menyediakan opsi untuk memuat ekstensi yang tidak dikemas menggunakan parameter args.
const puppeteer = require('puppeteer');
const path = require('path');
// Tentukan jalur ke folder ekstensi CapSolver yang diekstrak
const extensionPath = path.join(__dirname, 'capsolver-extension');
async function launchBrowserWithExtension() {
const browser = await puppeteer.launch({
headless: false, // Harus non-headless untuk ekstensi bekerja secara andal
args: [
`--disable-extensions-except=${extensionPath}`,
`--load-extension=${extensionPath}`,
'--no-sandbox', // Direkomendasikan untuk beberapa lingkungan
],
});
return browser;
}
// Contoh penggunaan:
// const browser = await launchBrowserWithExtension();
// const page = await browser.newPage();
// await page.goto('https://situs-aws-waf-anda.com');
Setelah browser dijalankan dengan Ekstensi CapSolver, alur otomatisasi menjadi jauh lebih sederhana. Ekstensi secara otomatis memantau halaman. Jika AWS WAF CAPTCHA terdeteksi, ekstensi mengambil alih, menyelesaikannya menggunakan layanan CapSolver, dan halaman secara otomatis memuat ulang atau melanjutkan.
Inti dari skrip otomatisasi pencarian AI Anda hanya perlu menavigasi ke halaman target dan menunggu CAPTCHA diselesaikan.
const puppeteer = require('puppeteer');
const path = require('path');
// ... (fungsi launchBrowserWithExtension dari Langkah 2) ...
async function runAwsWafAutomation() {
const browser = await launchBrowserWithExtension();
const page = await browser.newPage();
// 1. Navigasi ke URL yang dilindungi AWS WAF
const targetUrl = 'https://efw47fpad9.execute-api.us-east-1.amazonaws.com/latest'; // Contoh URL
console.log(`Mengarahkan ke ${targetUrl}...`);
await page.goto(targetUrl, { waitUntil: 'domcontentloaded' });
// 2. Menunggu CAPTCHA diselesaikan
// Ekstensi CapSolver akan secara otomatis mendeteksi dan menyelesaikan AWS WAF CAPTCHA.
// PRAKTEK TERBAIK: Menunggu ketiadaan elemen CAPTCHA atau kehadiran konten target.
try {
// Mengasumsikan CAPTCHA memiliki selektor tertentu, misalnya, '#aws-waf-captcha-container'
// Kami menunggu elemen ini menghilang (yaitu, CAPTCHA diselesaikan dan halaman melanjutkan)
console.log("Menunggu AWS WAF CAPTCHA diselesaikan oleh Ekstensi CapSolver...");
await page.waitForSelector('#aws-waf-captcha-container', { hidden: true, timeout: 60000 });
console.log("CAPTCHA diselesaikan! Melanjutkan dengan otomatisasi pencarian AI.");
// 3. Lanjutkan dengan logika otomatisasi pencarian AI Anda
// Contoh: Mengekstrak data dari halaman yang sekarang dapat diakses
const pageTitle = await page.title();
console.log(`Judul Halaman (Setelah CAPTCHA): ${pageTitle}`);
} catch (error) {
console.error("Penyelesaian CAPTCHA timeout atau gagal:", error.message);
}
await browser.close();
}
// runAwsWafAutomation();
Untuk pengembang yang lebih suka lingkungan murni tanpa tampilan atau memerlukan logika penyelesaian CAPTCHA yang diintegrasikan ke dalam aplikasi yang tidak berbasis browser, API CapSolver menawarkan alternatif yang kuat. Metode ini memerlukan Anda untuk mengekstrak parameter AWS WAF yang diperlukan (awsKey, awsIv, awsContext, dll.) dari halaman yang diblokir dan meneruskannya ke API.
Klaim Kode Bonus CapSolver Anda
Jangan lewatkan kesempatan untuk mengoptimalkan operasi Anda lebih lanjut! Gunakan kode bonus CAPN saat menambahkan dana ke akun CapSolver Anda dan dapatkan bonus tambahan 5% pada setiap penambahan, tanpa batas. Kunjungi CapSolver untuk mengklaim bonus Anda sekarang!
Contoh ini menggunakan API fetch standar (tersedia di Node.js modern) untuk berkomunikasi dengan CapSolver, berdasarkan struktur tugas yang disediakan dalam dokumentasi CapSolver.
const fetch = require('node-fetch'); // Gunakan 'node-fetch' untuk versi Node.js lama, atau fetch bawaan untuk versi baru
const CAPSOLVER_API_KEY = 'KUNCI_API_CAPSOLVER_ANDA';
const API_URL = 'https://api.capsolver.com';
/**
* Menyelesaikan AWS WAF CAPTCHA menggunakan API CapSolver.
* @param {string} websiteURL URL halaman yang menampilkan CAPTCHA.
* @param {object} awsParams Parameter yang diekstrak dari halaman yang diblokir (awsKey, awsIv, awsContext, dll.).
* @returns {Promise<string>} Nilai cookie aws-waf-token.
*/
async function solveAwsWafCaptcha(websiteURL, awsParams) {
// 1. Buat tugas
const createTaskPayload = {
clientKey: CAPSOLVER_API_KEY,
task: {
type: "AntiAwsWafTaskProxyLess", // Gunakan AntiAwsWafTask jika Anda perlu menentukan proxy
websiteURL: websiteURL,
...awsParams // Teruskan parameter yang diekstrak
}
};
let response = await fetch(`${API_URL}/createTask`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(createTaskPayload)
});
let result = await response.json();
if (result.errorId !== 0) {
throw new Error(`Kesalahan API CapSolver (createTask): ${result.errorDescription}`);
}
const taskId = result.taskId;
console.log(`Tugas dibuat dengan ID: ${taskId}. Menunggu hasil...`);
// 2. Poll hasil
const getResultPayload = {
clientKey: CAPSOLVER_API_KEY,
taskId: taskId
};
let solution = null;
for (let i = 0; i < 15; i++) { // Poll hingga 15 kali (maksimal 30 detik)
await new Promise(resolve => setTimeout(resolve, 2000)); // Tunggu 2 detik
response = await fetch(`${API_URL}/getTaskResult`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(getResultPayload)
});
result = await response.json();
if (result.errorId !== 0) {
throw new Error(`Kesalahan API CapSolver (getTaskResult): ${result.errorDescription}`);
}
if (result.status === 'ready') {
solution = result.solution;
break;
}
console.log(`Status: ${result.status}. Mencoba lagi...`);
}
if (!solution || !solution.cookie) {
throw new Error("CapSolver gagal mengembalikan token yang valid dalam waktu yang ditentukan.");
}
// solution.cookie berisi aws-waf-token
return solution.cookie;
}
// Contoh penggunaan dalam skrip Puppeteer tanpa tampilan:
/*
async function runHeadlessApiAutomation() {
// 1. Gunakan Puppeteer untuk navigasi dan mengekstrak parameter AWS WAF (misalnya, dari tag skrip atau respons jaringan)
// Langkah ini memerlukan keterampilan Puppeteer lanjutan untuk menangkap permintaan jaringan atau menganalisis sumber HTML.
const websiteURL = 'https://efw47fpad9.execute-api.us-east-1.amazonaws.com/latest';
const extractedAwsParams = {
awsKey: "AQIDAHjcYu/GjX+QlghicBg......",
awsIv: "CgAAFDIlckAAAAid",
awsContext: "7DhQfG5CmoY90ZdxdHCi8WtJ3z......",
// ... parameter opsional lainnya
};
try {
const awsWafToken = await solveAwsWafCaptcha(websiteURL, extractedAwsParams);
console.log(`Berhasil mendapatkan Token AWS WAF: ${awsWafToken.substring(0, 30)}...`);
// 2. Sisipkan token kembali ke sesi Puppeteer atau gunakan dalam header/cookie permintaan berikutnya
// Contoh: Menyisipkan sebagai cookie untuk permintaan berikutnya
// await page.setCookie({
// name: 'aws-waf-token',
// value: awsWafToken,
// domain: new URL(websiteURL).hostname,
// path: '/',
// });
// await page.reload({ waitUntil: 'networkidle0' });
} catch (error) {
console.error("Pengotomatan API Gagal:", error.message);
}
}
*/
Meskipun penyelesaian CAPTCHA kritis, sistem otomatisasi pencarian AI yang sukses memerlukan pendekatan berlapis.
| Praktik Terbaik | Deskripsi | Relevansi dengan Puppeteer/JS |
|---|---|---|
| Mode Rahasia | Gunakan perpustakaan seperti puppeteer-extra dengan puppeteer-extra-plugin-stealth untuk menyembunyikan tanda-tanda otomatisasi. |
Esensial untuk melewati pemeriksaan bot awal sebelum AWS WAF CAPTCHA bahkan ditampilkan. |
| Rotasi IP | Integrasikan layanan proxy untuk mengganti alamat IP, mencegah pembatasan kecepatan dan pemblokiran IP. | Gunakan argumen --proxy-server dalam puppeteer.launch() untuk mengarahkan lalu lintas melalui proxy berbasis rumah berkualitas tinggi. |
| Waktu Mirip Manusia | Implementasikan penundaan acak, tidak linear antara tindakan (misalnya, mengetik, mengklik, menggulir). | Gunakan page.waitForTimeout(Math.random() * 3000 + 1000) untuk menambahkan penundaan acak antara 1 hingga 4 detik. |
| Manajemen Sesi | Simpan kuki dan penyimpanan lokal antar sesi untuk mempertahankan profil pengguna yang konsisten. | Gunakan opsi userDataDir dalam puppeteer.launch() untuk menyimpan dan menggunakan kembali profil browser. |
Kombinasi kontrol browser yang kuat dari Puppeteer dan kemampuan penyelesaian CAPTCHA khusus dari CapSolver menawarkan solusi definitif untuk tantangan AWS WAF CAPTCHA dalam otomatisasi pencarian AI. Untuk lingkungan murni tanpa tampilan, API CapSolver menyediakan kekuatan dan fleksibilitas yang diperlukan. Dengan mengadopsi metode praktik terbaik ini, pengembang dapat memastikan alur pengumpulan data mereka tahan lama, efisien, dan mempertahankan tingkat keberhasilan tinggi.
Siap meningkatkan tingkat keberhasilan otomatisasi Anda? Berhenti membiarkan blokir CAPTCHA mengganggu alur kerja Anda. Klik di sini untuk mempelajari lebih lanjut tentang Ekstensi CapSolver dan kemampuan penyelesaian AWS WAF yang kuat, dan mulai uji coba gratis hari ini!
Meskipun API CapSolver sangat efektif, menggunakan Ekstensi menyederhanakan kode secara signifikan. Ekstensi beroperasi di dalam konteks browser, secara otomatis mendeteksi CAPTCHA, menyelesaikannya, dan menyisipkan token/cookie yang diperlukan (aws-waf-token) tanpa memerlukan skrip utama Puppeteer Anda untuk mengelola siklus permintaan/respons API yang kompleks. Ini adalah praktik terbaik kunci untuk kode otomatisasi browser yang bersih dan mudah dipelihara.
Untuk menjalankan ekstensi CapSolver secara andal, terutama untuk tantangan perilaku yang kompleks seperti AWS WAF CAPTCHA, umumnya disarankan untuk menjalankan Puppeteer dalam mode non-headless (headless: false). Ini memastikan lingkungan browser yang lengkap, termasuk skrip latar belakang ekstensi dan komponen visual, aktif untuk menangani tantangan tersebut.
AWS WAF CAPTCHA biasanya merupakan tantangan blok langsung yang diimplementasikan oleh Amazon Web Application Firewall, seringkali memerlukan token untuk melanjutkan. Di sisi lain, reCAPTCHA v3 adalah sistem berbasis skor yang berjalan diam-diam di latar belakang. Namun, keduanya sangat bergantung pada analisis perilaku, sehingga penggunaan teknik stealth dan layanan penyelesaian CAPTCHA khusus menjadi praktik terbaik yang diperlukan untuk keduanya.
Selain menggunakan Ekstensi CapSolver untuk penyelesaian CAPTCHA, Anda harus menerapkan praktik terbaik otomatisasi pencarian AI, seperti:
puppeteer-extra dengan plugin stealth.userDataDir).Anda dapat menemukan panduan dan contoh kode yang rinci di blog CapSolver: