ProxyScrape + Puppeteer: Cara Mengarahkan Scraper Node.js Melalui Proxy HTTP dan SOCKS5
Panduan langkah demi langkah untuk mengonfigurasi proxy residensial dan datacenter ProxyScrape di Puppeteer, termasuk autentikasi untuk proxy HTTP dan relay lokal untuk SOCKS5.
Gambaran Umum
Puppeteer adalah pustaka Node.js yang mengendalikan Chrome atau Chromium headless. Saat melakukan scraping dalam skala besar, mengarahkan permintaan melalui proxy sangat penting untuk menghindari blokir IP dan mengakses konten yang dibatasi secara geografis. Tutorial ini menunjukkan cara mengonfigurasi proxy residensial dan datacenter ProxyScrape di Puppeteer untuk protokol HTTP dan SOCKS5. Karena Chromium tidak mendukung proxy SOCKS5 terautentikasi secara langsung, Anda juga akan mempelajari cara menyiapkan relay lokal menggunakan gost untuk menjembatani autentikasi HTTP ke SOCKS5.
Prasyarat
- Node.js 18 atau lebih baru yang terpasang di Windows, macOS, atau Linux.
- Akun ProxyScrape dengan proxy residensial atau datacenter. Catat host, port, nama pengguna, dan kata sandi proxy Anda dari dasbor ProxyScrape.
- Pemahaman dasar tentang JavaScript dan baris perintah.
Langkah 1: Siapkan proyek Node.js baru
- Buat direktori baru dan inisialisasi proyek:
mkdir puppeteer-proxyscrape && cd puppeteer-proxyscrape npm init -y - Instal Puppeteer:
Ini mengunduh build Chromium yang kompatibel.npm install puppeteer
Langkah 2: Konfigurasikan proxy HTTP dengan autentikasi
Proxy HTTP ProxyScrape mendukung autentikasi nama pengguna/kata sandi. Puppeteer dapat memberikan kredensial proxy menggunakan metode page.authenticate().
Buat file bernama http-proxy.js:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: true,
args: [
'--proxy-server=http://proxy.proxyscrape.com:12345' // Ganti dengan host dan port ProxyScrape Anda
]
});
const page = await browser.newPage();
// Ganti dengan nama pengguna dan kata sandi ProxyScrape Anda
await page.authenticate({
username: 'your-username',
password: 'your-password'
});
await page.goto('https://httpbin.org/ip', { waitUntil: 'networkidle2' });
const content = await page.content();
console.log(content);
await browser.close();
})();
Jalankan skrip:
node http-proxy.js
Output harus menunjukkan IP proxy, yang mengonfirmasi pengaturan.
Langkah 3: Rotasi proxy HTTP per permintaan
Untuk scraping besar, rotasi proxy untuk setiap halaman atau permintaan. Pertahankan array proxy dan pilih satu secara acak atau berurutan.
const proxies = [
{ host: 'proxy1.proxyscrape.com', port: 12345, username: 'user', password: 'pass' },
{ host: 'proxy2.proxyscrape.com', port: 12345, username: 'user', password: 'pass' }
];
function getRandomProxy() {
return proxies[Math.floor(Math.random() * proxies.length)];
}
(async () => {
const proxy = getRandomProxy();
const browser = await puppeteer.launch({
args: [`--proxy-server=http://${proxy.host}:${proxy.port}`]
});
const page = await browser.newPage();
await page.authenticate({ username: proxy.username, password: proxy.password });
await page.goto('https://httpbin.org/ip');
// ...
await browser.close();
})();
Jika paket ProxyScrape Anda menyediakan endpoint berotasi (satu host:port yang merotasi IP per permintaan), gunakan itu alih-alih mengelola daftar.
Langkah 4: Gunakan proxy SOCKS5 melalui relay lokal
Chromium mendukung proxy SOCKS5 tetapi tidak mendukung autentikasi nama pengguna/kata sandi untuk itu. Untuk menggunakan proxy SOCKS5 ProxyScrape dengan autentikasi, jalankan relay lokal yang menerima HTTP tanpa autentikasi dan meneruskan ke proxy SOCKS5 terautentikasi.
-
Instal
gost(relay proxy sederhana). Di macOS dengan Homebrew:brew install gostDi Linux, unduh binary dari halaman rilis gost. Di Windows, unduh
.exedari halaman yang sama. -
Mulai
gostdengan listener HTTP dan forwarder SOCKS5:gost -L http://:8080 -F socks5://your-username:[email protected]:1080Ganti nama pengguna, kata sandi, host, dan port dengan detail SOCKS5 ProxyScrape Anda.
-
Arahkan Puppeteer ke relay HTTP lokal:
const browser = await puppeteer.launch({ args: ['--proxy-server=http://127.0.0.1:8080'] });Tidak perlu
page.authenticate()karena relay lokal menangani autentikasi. -
Uji dengan pemeriksaan
httpbin.org/ipyang sama.
Langkah 5: Verifikasi bahwa proxy berfungsi
Gunakan layanan echo IP yang andal untuk mengonfirmasi bahwa proxy aktif dan tidak membocorkan IP asli Anda:
await page.goto('https://api.ipify.org?format=json');
const body = await page.evaluate(() => document.body.innerText);
console.log(JSON.parse(body).ip);
Bandingkan IP yang dikembalikan dengan IP Anda yang sebenarnya.
Pemecahan Masalah
- 407 Proxy Authentication Required: Pastikan
page.authenticate()dipanggil sebelumpage.goto(). Untuk SOCKS5, konfirmasi kredensial relay sudah benar. - ERR_PROXY_CONNECTION_FAILED: Periksa host dan port proxy. Untuk SOCKS5, pastikan relay
gostberjalan dan dapat dijangkau. - Kesalahan SSL: Beberapa proxy mungkin tidak mendukung tunneling HTTPS. Gunakan proxy HTTP untuk target HTTPS, atau verifikasi bahwa proxy SOCKS5 Anda mendukung CONNECT.
- Respons lambat: Proxy residensial bisa lebih lambat. Tingkatkan timeout dengan
page.setDefaultNavigationTimeout(60000). - IP tidak berubah: Jika menggunakan daftar proxy statis, konfirmasi logika rotasi. Jika menggunakan endpoint berotasi, periksa bahwa rotasi ProxyScrape diaktifkan di dasbor Anda.
Ringkasan
Anda telah berhasil mengonfigurasi proxy HTTP dan SOCKS5 ProxyScrape dengan Puppeteer. Untuk proxy HTTP, gunakan --proxy-server dan page.authenticate(). Untuk SOCKS5, jalankan relay lokal dengan gost untuk menangani autentikasi. Rotasi proxy per permintaan untuk mendistribusikan lalu lintas dan menghindari blokir. Selalu verifikasi IP keluar Anda sebelum memulai scraping besar.