Kombinasi klasik Selenium dan Puppeteer semakin sering terjebak oleh sistem anti-bot tingkat Cloudflare, DataDome, dan PerimeterX. Sebagai gantinya, framework baru muncul — Scrapling, Botasaurus, dan nodriver, yang dirancang sejak awal dengan fokus pada penghindaran deteksi. Namun, bahkan framework yang paling canggih pun tidak berguna tanpa proxy yang diatur dengan benar. Dalam artikel ini, kita akan membahas cara menghubungkan proxy di masing-masing dari ketiga alat ini, kesalahan apa yang membunuh efektivitas dan bagaimana memilih jenis IP untuk tugas parsing tertentu.
Apa yang membedakan Scrapling, Botasaurus, dan nodriver dari Selenium
Ketiga framework ini muncul sebagai respons terhadap fakta bahwa Selenium dan Puppeteer biasa menjadi terlalu mudah terdeteksi. Sistem anti-bot memeriksa puluhan parameter: protokol CDP, navigator.webdriver, rendering canvas, waktu kejadian — dan driver klasik meninggalkan jejak khas di hampir setiap parameter tersebut.
Scrapling — pustaka Python yang menggabungkan parsing HTML adaptif dengan kemampuan emulasi browser melalui StealthyFetcher berbasis Camoufox (fork Firefox dengan fingerprint yang dipatch). Ini sangat baik untuk tugas-tugas, di mana diperlukan parsing cepat dengan konsumsi sumber daya minimal, tetapi pada saat yang sama perlindungan situs aktif memeriksa TLS-fingerprint.
Botasaurus — framework berbasis Chromium yang dimodifikasi (undetected-chromedriver di bawah kap), dirancang untuk scraping paralel massal dengan manajemen profil browser otomatis dan dukungan bawaan untuk menyelesaikan captcha melalui layanan pihak ketiga.
nodriver — penerus undetected-chromedriver dari penulis yang sama, yang sepenuhnya meninggalkan Selenium WebDriver dan bekerja langsung melalui CDP (Chrome DevTools Protocol), yang menghilangkan sebagian besar artefak deteksi otomatisasi.
Ciri umum dari ketiga framework ini adalah mereka mengurangi deteksi pada tingkat fingerprint browser, tetapi tidak menyelesaikan masalah reputasi IP. Jika permintaan datang dari IP pusat data yang sudah terdaftar dalam daftar hitam DataDome atau Cloudflare, tidak ada patch browser yang akan menyelamatkan dari captcha atau kesalahan 403.
Pengaturan proxy di Scrapling
Scrapling mendukung proxy baik dalam mode HTTP cepat (Fetcher) maupun dalam mode browser (StealthyFetcher). Untuk parsing statis tanpa rendering JS, proxy diteruskan langsung dalam parameter permintaan:
from scrapling.fetchers import Fetcher
response = Fetcher.get(
"https://example.com",
proxy="http://user:[email protected]:9000"
)
print(response.status)
Untuk mode dengan browser penuh (StealthyFetcher di Camoufox), proxy diteruskan melalui dictionary dengan bidang terpisah untuk server, nama pengguna, dan kata sandi — ini penting, karena Camoufox memproses otorisasi proxy dengan cara yang berbeda dibandingkan dengan Chromium biasa:
from scrapling.fetchers import StealthyFetcher
response = StealthyFetcher.fetch(
"https://example.com",
proxy={
"server": "gate.proxycove.com:9000",
"username": "user",
"password": "pass"
},
headless=True
)
print(response.status)
Kesalahan umum adalah meneruskan proxy sebagai string utuh dalam mode browser, seperti dalam permintaan HTTP. Camoufox dalam hal ini baik mengabaikan otorisasi, atau gagal dengan timeout pada tahap koneksi ke server proxy. Jika Anda melihat kesalahan ERR_NO_SUPPORTED_PROXIES — periksa format dictionary dengan bidang terpisah.
Pengaturan proxy di Botasaurus
Botasaurus menggunakan dekorator @browser
untuk konfigurasi driver, dan proxy diteruskan sebagai parameter dari dekorator ini atau langsung ke fungsi peluncuran:
from botasaurus.browser import browser, Driver
@browser(
proxy="http://user:[email protected]:9000"
)
def scrape_data(driver: Driver, data):
driver.get("https://example.com")
return driver.page_html
scrape_data()
Jika perlu menghubungkan proxy yang berbeda untuk setiap tugas paralel (yang sangat penting dalam scraping massal melalui Botasaurus), lebih baik meneruskan proxy secara dinamis melalui daftar data, daripada menghardcode dalam dekorator:
from botasaurus.browser import browser, Driver
@browser
def scrape_with_proxy(driver: Driver, data):
driver.config.proxy = data["proxy"]
driver.get(data["url"])
return driver.page_html
tasks = [
{"url": "https://example.com/page1", "proxy": "http://user:pass@ip1:port"},
{"url": "https://example.com/page2", "proxy": "http://user:pass@ip2:port"},
]
scrape_with_proxy(tasks)
Botasaurus sangat baik dalam memparalelkan tugas melalui multiprocessing, jadi dalam scraping massal penting untuk menggunakan proxy dengan kumpulan IP yang cukup — jika tidak, beberapa thread akan berjuang untuk alamat yang sama, yang segera mengungkapkan otomatisasi kepada anti-bot berdasarkan pola frekuensi permintaan.
Pengaturan proxy di nodriver
nodriver bekerja melalui koneksi langsung ke CDP tanpa lapisan Selenium, jadi proxy diatur di sini melalui argumen peluncuran browser, bukan melalui API terpisah. Untuk proxy tanpa otorisasi, semuanya sederhana:
import nodriver as uc
import asyncio
async def main():
browser = await uc.start(
browser_args=["--proxy-server=http://gate.proxycove.com:9000"]
)
page = await browser.get("https://example.com")
await asyncio.sleep(3)
browser.stop()
asyncio.run(main())
Masalahnya adalah bahwa Chromium tidak mendukung login/kata sandi dalam proxy melalui --proxy-server secara langsung.
Untuk proxy yang memerlukan otorisasi di nodriver, Anda perlu mengatur tunnel proxy lokal tanpa otorisasi
(misalnya, melalui px atau 3proxy), atau menangani peristiwa CDP Fetch.authRequired:
import nodriver as uc
import asyncio
async def main():
browser = await uc.start(
browser_args=["--proxy-server=http://gate.proxycove.com:9000"]
)
page = await browser.get("https://example.com")
async def auth_handler(event):
await page.send(uc.cdp.fetch.continue_with_auth(
request_id=event.request_id,
auth_challenge_response=uc.cdp.fetch.AuthChallengeResponse(
response="ProvideCredentials",
username="user",
password="pass"
)
))
page.add_handler(uc.cdp.fetch.AuthRequired, auth_handler)
await asyncio.sleep(5)
browser.stop()
asyncio.run(main())
Ini adalah poin yang paling tidak jelas di antara ketiga framework — banyak pengembang menghabiskan berjam-jam mencoba memahami, mengapa otorisasi tidak berfungsi, tanpa mengetahui tentang domain Fetch di CDP.
Rotasi proxy dan melawan anti-bot
Bahkan fingerprint browser yang diatur dengan sempurna tidak akan menyelamatkan jika satu IP menerima lebih dari 50-100 permintaan per menit ke domain yang dilindungi. DataDome dan Cloudflare menganalisis frekuensi permintaan dari alamat tertentu dan pola waktu antara tindakan — interval yang terlalu merata juga mencurigakan.
Skema rotasi yang efektif untuk ketiga framework ini dibangun dengan cara yang sama:
- Gunakan gateway dengan rotasi IP otomatis di tingkat penyedia — tidak perlu menulis logika penggantian alamat untuk setiap permintaan.
- Untuk tugas sesi (login, navigasi multi-halaman) kunci IP untuk sesi melalui parameter sticky dalam string koneksi.
- Untuk parsing halaman statis yang sederhana, rotasi IP untuk setiap permintaan atau setiap 5-10 permintaan.
- Tambahkan jeda acak antara permintaan (1-4 detik) — ini mengurangi deteksi berdasarkan pola waktu.
Contoh sesi sticky dalam string koneksi, di mana session-id mempertahankan satu IP keluar yang sama selama 10 menit:
proxy = "http://user-session-abc123:[email protected]:9000"
Untuk Botasaurus, skema ini sangat berguna, karena dalam scraping paralel setiap proses dapat menerima session-id uniknya sendiri, dan Anda mendapatkan kumpulan IP yang stabil tanpa pengelolaan manual daftar alamat.
Jenis proxy apa yang harus dipilih untuk setiap framework
Jenis proxy mempengaruhi keberhasilan parsing tidak kurang dari pemilihan framework. Berikut adalah perbandingan berdasarkan tugas:
| Tugas | Jenis proxy yang direkomendasikan | Mengapa |
|---|---|---|
| Parsing situs dengan Cloudflare/DataDome | Proxy residensial | IP nyata dari pengguna rumah jarang masuk dalam daftar hitam anti-bot |
| Massal parsing tanpa perlindungan ketat | Proxy pusat data | Kecepatan lebih tinggi, biaya lebih rendah pada volume permintaan yang besar |
| Emulasi pengguna nyata di situs mobile | Proxy mobile | Alamat CGNAT dari operator seluler memiliki tingkat kepercayaan maksimum di mata anti-bot |
Untuk Scrapling dalam mode StealthyFetcher, proxy residensial memberikan efek terbesar, karena Camoufox sudah menyelesaikan masalah fingerprint browser — yang tersisa hanyalah tidak terdeteksi berdasarkan IP. Untuk Botasaurus dalam scraping paralel massal, proxy pusat data sering kali optimal dalam hal kecepatan/harga, jika situs target tidak menggunakan perlindungan tingkat lanjut seperti DataDome.
Kesalahan umum saat menghubungkan proxy dan otomatisasi browser
Dalam praktiknya, sebagian besar kegagalan parsing terkait bukan dengan framework itu sendiri, tetapi dengan konfigurasi proxy yang salah. Berikut adalah daftar kesalahan yang paling sering terjadi:
- IP yang sama untuk semua thread paralel Botasaurus. Anti-bot melihat 20 sesi bersamaan dari satu alamat dan memblokirnya dalam hitungan menit.
- Penerusan proxy sebagai string dalam mode browser Scrapling. Camoufox memerlukan dictionary dengan bidang terpisah — jika tidak, otorisasi tidak berhasil.
- Mengabaikan domain Fetch CDP di nodriver. Tanpa handler authRequired, proxy yang memerlukan otorisasi tidak akan terhubung, browser akan macet saat memuat.
- Kurangnya rotasi saat melakukan tindakan sesi. Mengganti IP di tengah sesi yang terotorisasi segera mengungkapkan otomatisasi — gunakan sesi sticky.
- Ketidaksesuaian geolokasi proxy dan lokal browser. IP dari Jerman dengan header Accept-Language: ru — tanda klasik bot untuk sistem fraud-scoring.
- Frekuensi permintaan yang terlalu agresif bahkan dengan rotasi. Rotasi IP tidak menghilangkan kebutuhan untuk melakukan jeda antara permintaan — pola perilaku juga dianalisis.
Secara terpisah, penting untuk memeriksa kebocoran DNS saat bekerja melalui proxy dalam mode browser — kadang-kadang browser meresolusi domain melalui DNS sistem, bukan melalui tunnel proxy, yang menciptakan ketidaksinkronan antara IP permintaan dan IP resolusi, yang mudah terdeteksi oleh sistem perlindungan.
Kesimpulan
Scrapling, Botasaurus, dan nodriver menyelesaikan masalah deteksi pada tingkat fingerprint browser jauh lebih baik daripada Selenium klasik, tetapi tidak ada dari mereka yang menghilangkan pentingnya proxy yang berkualitas. Pengaturan yang benar untuk otorisasi (terutama di nodriver melalui CDP), rotasi IP yang cerdas, dan pemilihan jenis proxy yang tepat untuk sistem anti-bot tertentu — tiga faktor yang menentukan stabilitas parsing dalam jangka panjang.
Jika Anda melakukan scraping situs dengan perlindungan canggih seperti Cloudflare atau DataDome, mulailah dengan proxy residensial — mereka memberikan persentase permintaan yang berhasil tertinggi berkat reputasi IP. Untuk tugas massal tanpa perlindungan ketat, proxy pusat data tetap menjadi pilihan optimal dalam hal kecepatan dan biaya pada volume besar.