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.

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.
Anti-bot modern berlapis. Pahami dulu musuh kalian sebelum menyerang:
cf_clearance cookie setelah melewati challenge. Cek JavaScript, verifikasi browser, lalu set cookie yang sah untuk beberapa menit.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.
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 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:
scrapling installfrom 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:
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.
Ketika anti-bot terlalu agresif untuk diselesaikan sendiri, ada layanan pihak ketiga. Dua kategori umum:
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.
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:
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.
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:
solve_cloudflare=True di StealthyFetcher menyelesaikan challenge otomatis; aktifkan hanya saat perlu karena menambah waktu fetch.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.