Melewati Cloudflare dengan Puppeteer – pengaturan saya

melewati sampul dalang cloudflare

Lewati Cloudflare dengan Puppeteer

 

 

Titik awal

Saya ingin mengikis situs yang dilindungi oleh Cloudflare. Tanpa proxy, tanpa browser – tidak ada jalan keluar: 403 Forbidden, jawaban kosong atau langsung cf-chl-bypass. Jadi: browser tanpa kepala adalah suatu keharusan.

Sasaran: Memanggil halaman secara otomatis, membaca DOM, mengekstrak JSON. Tidak ada perayapan besar-besaran, hanya tarikan biasa.

⚙️ Pemilihan alat

saya memilih Dalang diputuskan karena:

  • Pengaturan cepat
  • Kontrol halaman dengan mudah melalui JS
  • Tidak ada overhead seperti dengan Selenium + Webdriver

Saya menguji alternatif seperti Playwright atau undetected-chromedriver kemudian, tetapi pertama-tama: Puppeteer murni.

Masalah

  • Cloudflare memblokir Chrome tanpa kepala
    → meskipun waktu tunggu hanya halaman kesalahan yang muncul
  • navigator.webdriver = true
    → hapus sidik jari untuk deteksi bot
  • Agen pengguna & header hilang
    → Chrome tanpa gaya, konten kosong

Langkah-langkah solusi

1. Nonaktifkan tanpa kepala

const browser = await puppeteer.launch({
  headless: false,
  args: ['--no-sandbox', '--disable-setuid-sandbox']
});

2. navigator.webdriver menghapus

await page.evaluateOnNewDocument(() => {
  Object.defineProperty(navigator, 'webdriver', {
    get: () => false,
  });
});

3. Atur agen pengguna + header

await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64)...');
await page.setExtraHTTPHeaders({
  'accept-language': 'de-DE,de;q=0.9',
});

4. Tambahkan waktu tunggu + periksa tangkapan layar

await page.goto(url, { waitUntil: 'networkidle2' });
await page.waitForTimeout(3000);
await page.screenshot({ path: 'proof.png' });

5. Integrasikan proxy (jika IP diblokir)

const browser = await puppeteer.launch({
  headless: false,
  args: [
    '--proxy-server=http://user:[email protected]:8000',
  ],
});

Apa yang saya pelajari

  • Tanpa kepala = langsung diblokir, tidak peduli seberapa bagus headernya
  • navigator.webdriver harus pergi, kalau tidak kamu tidak punya kesempatan
  • waitForTimeout sering kali perlu menunggu JS dinamis

Bonus: Skrip minimal

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();

  await page.setUserAgent('Mozilla/5.0...');
  await page.evaluateOnNewDocument(() => {
    Object.defineProperty(navigator, 'webdriver', { get: () => false });
  });

  await page.goto('https://zielseite.com', { waitUntil: 'networkidle2' });
  const html = await page.content();
  console.log(html);

  await browser.close();
})();

Kesimpulan

Cloudflare memang menyebalkan, tetapi bukannya tidak bisa dibobol – dengan otomatisasi browser, Anda hampir selalu dapat melewatinya. Headless = keluar, header + delay = masuk.

Uji coba dari 04/2025 – dapat berubah jika Cloudflare menyesuaikan logika deteksinya.

Nama saya Kadek dan saya seorang pelajar dari Indonesia dan sedang belajar ilmu komputer di Jerman. Blog ini berfungsi sebagai platform di mana saya dapat berbagi pengetahuan tentang topik-topik seperti web scraping, screen scraping, penambangan data web, pengumpulan web, ekstraksi data web, dan penguraian data web.