Belajar Scrapling - CAPTCHA & Anti-Bot Bypass
Episode 15 of 23

Belajar Scrapling - CAPTCHA & Anti-Bot Bypass

Menghadapi proteksi anti-bot modern: membedah mekanisme Cloudflare, Turnstile, dan JS challenge, menentukan kapan bypass itu etis, memakai StealthyFetcher dengan solve_cloudflare untuk menembus proteksi, layanan captcha alternatif, serta manajemen rate limit dan blokir saat crawl berjalan besar.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

Di episode 14 kalian berhenti sejenak untuk membangun kompas etika: membaca robots.txt, menata rate limit yang sopan, melindungi data, dan mengamankan kredensial. Sekarang kita kembali ke wilayah teknis — yang paling sering ditunggu-tunggu: CAPTCHA dan anti-bot bypass.

Episode ini membedah mekanisme anti-bot yang paling umum — Cloudflare, Turnstile, dan JS challenge — lalu menunjukkan cara menghadapinya dengan StealthyFetcher, membahas layanan captcha alternatif, dan menata manajemen rate limit serta blokir ketika crawl kalian tumbuh besar. Ingat, semua yang kalian pelajari di sini hanya sah untuk situs yang memang berhak kalian akses.

Membedah Mekanisme Anti-Bot

Anti-bot modern berlapis. Pahami dulu musuh kalian sebelum menyerang:

  • Cloudflare Challenge. Halaman meminta cf_clearance cookie setelah melewati challenge. Cek JavaScript, verifikasi browser, lalu set cookie yang sah untuk beberapa menit.
  • Turnstile. Versi Cloudflare yang lebih baru — widget non-intrusif yang menilai "kemanusiaan" pengunjung dari perilaku, tanpa harus mengetik kode. Menilai fingerprint browser, riwayat kunjungan, dan pola interaksi.
  • JS Challenge. Situs memaksa JavaScript berjalan untuk membuktikan browser sungguhan. Kalau request kalian tidak menjalankan JS (misalnya murni HTTP), server tidak pernah membagikan kontennya.
  • Interstitial. Halaman perantara yang muncul sebelum konten asli, menampilkan challenge atau menunggu beberapa detik.

Poin kuncinya: semua mekanisme ini hidup di layer browser. Request HTTP telanjang tidak akan pernah lolos karena server butuh bukti bahwa ada JavaScript dan browser yang benar-benar berjalan. Di sinilah fetcher berbasis browser masuk.

Kapan Bypass itu Etis

Sebelum menulis kode apa pun, jawab tiga pertanyaan: apakah kalian berhak mengakses data itu, apakah kecepatan kalian manusiawi, dan apakah kalian siap berhenti saat diminta?

Bypass itu sah dan etis jika: situsnya publik, kalian sudah membaca robots.txt dan ToS, kalian tidak mengakses area yang memang dikunci untuk akun berbayar, dan kalian menghormati rate limit. Bypass itu bermasalah jika: kalian menembus proteksi untuk mengambil data pribadi massal, menjual konten berbayar, atau melanjutkan crawling setelah diminta berhenti.

Kemampuan teknis tidak membebaskan kalian dari etika. solve_cloudflare di Scrapling adalah alat yang sah untuk akses resmi — bukan kunci master untuk mencuri.

Warning

Beberapa situs menggunakan CAPTCHA justru untuk mencegah serangan DDoS dan penyalahgunaan. Menembusnya tanpa izin bisa masuk pelanggaran ToS bahkan undang-undang, tergantung yurisdiksi. Gunakan kemampuan ini hanya untuk target yang berhak kalian akses.

StealthyFetcher: Browser yang Menyamar

StealthyFetcher menjalankan browser Firefox yang dimodifikasi — bukan sekadar Chromium biasa — lengkap dengan spoofing fingerprint dan berbagai mekanisme anti-deteksi. Browser dijalankan sesuai kebutuhan, challenge diselesaikan otomatis, dan hasilnya dikembalikan sebagai Adaptor biasa:

instal-browser.bash
scrapling install
Pythonstealthy-fetch.py
from scrapling.fetchers import StealthyFetcher
 
page = StealthyFetcher.fetch(
    "https://nopecha.com/demo/cloudflare",
    headless=True,
    solve_cloudflare=True,
)
print(page.css("title::text").get())

Parameter solve_cloudflare=True mengaktifkan penyelesaian otomatis Turnstile, interstitial, dan challenge Cloudflare lainnya. Karena ini menyelesaikan challenge sungguhan di browser sungguhan, request kalian lolos tanpa harus memecahkan CAPTCHA secara manual. Catatan penting: mode ini menambah waktu fetch beberapa detik — aktifkan hanya ketika benar-benar dibutuhkan.

Untuk mempertahankan sesi melewati beberapa halaman, gunakan versi session-nya — cookie cf_clearance ikut dipertahankan sehingga halaman berikutnya tidak menyelesaikan challenge dari nol:

Pythonstealthy-session.py
from scrapling.fetchers import StealthySession
 
with StealthySession(
    headless=True,
    solve_cloudflare=True,
    network_idle=True,
) as session:
    page1 = session.fetch("https://example.com/proteksi/halaman-1")
    page2 = session.fetch("https://example.com/proteksi/halaman-2")

Perhatikan bahwa browser fetcher memakai timeout dalam milidetik (default 30000), berbeda dari Fetcher HTTP yang memakai detik.

Alternatif: Layanan Captcha dan WebScrapingAI

Ketika anti-bot terlalu agresif untuk diselesaikan sendiri, ada layanan pihak ketiga. Dua kategori umum:

  • Layanan captcha solving. Mereka memecahkan CAPTCHA secara manual atau otomatis dan mengembalikan token/cookie yang sah. Cocok untuk kasus edge, tapi menambah biaya per request dan latency.
  • WebScrapingAI dan sejenisnya. API yang menangani seluruh siklus: fetching, bypass anti-bot, hingga ekstraksi terstruktur. Kalian mengirim URL, mereka mengembalikan data. Cocok kalau tidak ingin mengelola infrastruktur browser sendiri.

Scrapling terintegrasi dengan ekosistem ini lewat ekstra scrapling[ai] — yang akan kalian bedah lebih dalam di episode 19. Strategi umumnya: mulai dengan StealthyFetcher untuk menyelesaikan sendiri; kalau berhasil, hemat biaya. Kalau gagal, fallback ke layanan eksternal untuk request yang sulit saja.

Manajemen Rate Limit dan Blokir di Skala Besar

Ketika crawl membesar, tantangannya bukan satu halaman, melainkan distribusi beban yang stabil. Gabungkan semua pelajaran sebelumnya: autothrottle untuk jeda adaptif, deteksi blokir, dan retry. Spider Scrapling menyediakan atribut untuk ini:

Pythonspider-anti-bot.py
from scrapling.spiders import Spider, Response
 
class ProteksiSpider(Spider):
    name = "proteksi"
    start_urls = ["https://example.com/proteksi"]
    robots_txt_obey = True
    max_blocked_retries = 4
 
    async def is_blocked(self, response: Response) -> bool:
        if response.status in {403, 429, 503}:
            return True
        body = response.body.decode("utf-8", errors="ignore")
        return "challenge" in body.lower() and "cf-chl" in body.lower()

autothrottle secara otomatis menyesuaikan jeda antar request berdasarkan respons server — menambah jeda saat server mulai melambat, mengurangi saat server tenang. Dipadukan dengan is_blocked yang cerdas dan proxy rotation dari episode 12, spider kalian jadi sistem yang beradaptasi: pelan saat diminta, kencang saat diizinkan.

Penutup

Kalian sekarang mengenal medan anti-bot modern: Cloudflare challenge dengan cf_clearance, Turnstile yang menilai perilaku, dan JS challenge yang memaksa browser sungguhan. Kalian tahu StealthyFetcher dengan solve_cloudflare adalah senjata utama — dan tahu bahwa kemampuan teknis tidak menggantikan keputusan etis. Kalian juga punya peta jalan alternatif: layanan captcha dan WebScrapingAI untuk kasus sulit, plus autothrottle dan deteksi blokir untuk skala besar.

Inti yang harus dibawa pulang:

  • Cloudflare, Turnstile, dan JS challenge bekerja di layer browser — HTTP polos tidak akan pernah lolos.
  • solve_cloudflare=True di StealthyFetcher menyelesaikan challenge otomatis; aktifkan hanya saat perlu karena menambah waktu fetch.
  • Session browser mempertahankan cookie challenge, sehingga halaman berikutnya tidak mengulang penyelesaian.
  • Bypass hanya etis untuk target yang berhak kalian akses, dengan kecepatan manusiawi dan kesiapan berhenti.
  • Di skala besar, padukan autothrottle, deteksi blokir, dan proxy rotation agar beban tetap sopan dan stabil.

Di episode 16 kita berurusan dengan konten yang tidak tampil tanpa JavaScript: dynamic content dan SPA handling. Kalian akan menangani lazy loading dan infinite scroll, memakai waiting strategy agar elemen benar-benar siap sebelum diekstrak, menangkap data XHR dari SPA, dan memutuskan kapan memakai fetcher cepat atau browser.