Browser headless terdeteksi: penyebab dan solusinya (2026)
Sebuah situs menampilkan pesan "headless browser detected", atau diam-diam menyajikan halaman yang berbeda untuk browser otomatis Anda. Situs melakukan ini karena browser headless berjalan tanpa jendela dan sering berbeda dari browser desktop biasa dalam beberapa hal kecil yang bisa diukur. Panduan ini menjelaskan sinyal apa saja yang diperiksa situs, cara mendiagnosis apa yang dibocorkan browser Anda sendiri, dan seperti apa perbaikan yang masuk akal. Panduan ini juga membahas titik di mana jawaban yang tepat adalah berhenti, atau memperlakukan pemeriksaan itu sebagai langkah captcha.
Mengapa situs memeriksa browser headless
Framework otomatisasi menjalankan mesin browser sungguhan, jadi sebagian besar halaman berperilaku sama. Perbedaannya muncul di bagian pinggirnya:
- Penanda otomatisasi. Browser yang dijalankan oleh alat otomatisasi secara historis menampilkan properti
navigator.webdriveryang bernilaitrue, dan beberapa framework meninggalkan jejak lain di halaman. - Fitur browser yang hilang atau aneh. Build headless bisa melaporkan tidak ada plugin, daftar bahasa yang tidak biasa, atau ukuran jendela yang tidak sesuai dengan layar sungguhan.
- Perbedaan rendering. Output canvas dan WebGL bisa berbeda antara lingkungan headless dan headed, terutama di server tanpa GPU.
- Waktu. Klik dan pemuatan halaman yang diotomatisasi sering kali memiliki ritme yang tidak akan dihasilkan oleh manusia.
- Perilaku jaringan. Header request, urutannya, dan handshake TLS dapat membocorkan bahwa klien yang digunakan bukan browser.
Situs menggabungkan sinyal-sinyal ini menjadi sebuah skor. Skor rendah bisa berarti penurunan kualitas secara diam-diam, serangkaian pemeriksaan tambahan, atau pemblokiran.
Langkah 1: lihat apa yang diekspos browser Anda
Sebelum mengubah apa pun, lihat apa yang bisa dibaca sebuah halaman dari otomatisasi Anda. Skrip di bawah ini membuka halaman yang Anda kendalikan dan mencetak sinyal-sinyal yang penting. Ini adalah alat diagnosis: gunakan pada halaman uji Anda sendiri, bukan untuk memeriksa sistem orang lain.
from playwright.sync_api import sync_playwright
CHECK = """() => ({
webdriver: navigator.webdriver,
languages: navigator.languages,
plugins: navigator.plugins.length,
userAgent: navigator.userAgent,
screen: [screen.width, screen.height],
viewport: [window.innerWidth, window.innerHeight],
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
})"""
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto("https://example.com") # ganti dengan halaman yang Anda miliki
print(page.evaluate(CHECK))
browser.close()
Jalankan skrip yang sama dengan headless=False, lalu bandingkan kedua hasilnya. Perbedaan di antara keduanya adalah hal-hal yang mungkin dilihat oleh situs.
Langkah 2: perbaiki ketidakkonsistenan, bukan hanya flag
Menyembunyikan satu flag sambil membiarkan yang lain tetap sama adalah kesalahan paling umum. User agent yang menyebut Windows, sementara font, zona waktu, dan ukuran layar menggambarkan server Linux, adalah sinyal yang lebih kuat daripada satu properti saja. Targetkan lingkungan yang konsisten secara internal:
- Gunakan browser headed jika memungkinkan, atau mode headless yang sesuai dengan browser desktop terkini.
- Atur viewport dan bahasa yang saling cocok.
- Jaga zona waktu dan locale tetap konsisten dengan alamat IP yang Anda gunakan.
- Gunakan ulang satu profil dan cookie-nya untuk satu identitas, daripada mulai dari awal di setiap run.
Playwright memungkinkan Anda mengatur beberapa hal ini di satu tempat:
context = browser.new_context(
locale="en-US",
timezone_id="America/New_York",
viewport={"width": 1366, "height": 768},
)
page = context.new_page()
Langkah 3: perlambat dan bertindaklah seperti pengunjung
Otomatisasi menjadi jelas ketika ia lebih cepat daripada yang bisa dilakukan manusia. Tambahkan jeda yang realistis di antara pemuatan halaman, hindari mengklik elemen yang sama dengan ritme yang sempurna, dan jangan membuka ratusan halaman secara paralel dari satu alamat. Melakukan request yang lebih sedikit dan lebih lambat juga mengurangi beban pada situs, dan itu memang hal yang benar untuk dilakukan.
Langkah 4: ketahui kapan pemeriksaan itu adalah captcha
Beberapa alur deteksi berakhir dengan tantangan, bukan pemblokiran. Anda akan melihat widget captcha, dan langkah itu membutuhkan token dari solver. Jenis captcha yang aktif di Scarnox saat ini adalah PopularCaptcha. Panduan Python PopularCaptcha menunjukkan cara token diminta dan dikirimkan. Widget lain, seperti Cloudflare Turnstile, masuk dalam rencana tetapi belum aktif, jadi periksa jenis captcha yang dijelaskan sebelum Anda merencanakan sesuatu berdasarkan widget tersebut.
Langkah captcha tidak berarti sisa pengaturan Anda sudah benar. Jika situs yang sama memblokir setiap sesi headless tidak peduli bagaimana Anda mengonfigurasinya, itu adalah sinyal yang jelas bahwa pemilik situs tidak menginginkan akses otomatis. Hormati itu.
Yang tidak boleh dilakukan
Jangan mencoba menyembunyikan otomatisasi dari situs yang melarangnya, dan jangan menggunakan alat penghindar deteksi untuk melewati kontrol akses. Itu adalah jenis proyek yang berbeda dari pengujian dan pengumpulan data publik yang dibahas panduan ini. Jika proyek Anda membutuhkan akses yang belum diberikan kepada Anda, tanyakan kepada pemilik situs atau cari API atau feed data resmi.
Scraping secara bertanggung jawab
- Periksa
robots.txtdan ketentuan situs sebelum Anda mengotomatisasinya. - Jaga laju request tetap rendah, dan cache halaman yang sudah Anda ambil.
- Perlakukan pemblokiran sebagai jawaban, bukan teka-teki yang harus diakali.
- Jangan mengumpulkan data pribadi tanpa dasar hukum yang sah.
Langkah selanjutnya di sini
Jika otomatisasi Anda untuk pengujian end-to-end, pendekatannya berbeda: lihat captcha dalam pengujian otomatis. Jika Anda menjalankan pengaturan Playwright atau Puppeteer, penanganan captcha di Playwright dan Puppeteer menjelaskan di mana token diletakkan.
Mulai dengan kredit uji coba gratis, tanpa kartu: buat akun dan uji alur PopularCaptcha di halaman Anda sendiri. Untuk tarif terbaru, lihat halaman harga.